spider(一)
此爬虫内容无架构:
1.URL管理器:用集合,mysql表,缓存等
2.网页下载器:实现网页下载,
urllib2:官方基础模块
requests:三方的(更强):伪装成浏览器访问,代理登录,https加密访问等
3.页面解析器:
正则
html.parser解析器模块
lxml 解析器
soup = BeautifulSoup(html,"lxml") print soup.a
print "+++"
print soup.a.string
print "+++"
print type(soup.a.string) # <class 'bs4.element.NavigableString'>
第一行:将 html.text 用 lxml 解析,后赋值给soup变量
第三行:打印出搜索到的第一个 a 标签(即a节点)
第五行:打印出 a 标签内的文字。
获取标签 dl 所有的直接子节点:
1 for i in soup.dl.contents:
print i
print "++++++++++++++++"
# soup.dl.contents :返回其下所有节点(列表方式)
# soup.dl.children :遍历才能获得内容
获取节点的内容:用 soup.dl.strings
for string in soup.dl.strings:
print repr(string)
查找内容:
print soup.find_all('dt') #返回列表,里面包括了所有的 dt 标签
print soup.select("dt") #同上,,[<dt>Mutation ID</dt>, <dt>Gene name</dt>, <dt>Remark</dt>, <dt>Recurrent</dt>, <dt>Drug resistance</dt>]
print soup.select(".inline > dd") #精准定位,查找 dd 标签
print soup.select("dt").get_text() # AttributeError: 'list' object has no attribute 'get_text'
用 get_text() 方法,获取里面的文字。
for dt in soup.select(".inline > dt"):
print dt.get_text()
print "++++++++++++++++++" #每获取一个 dt 里面的文字,打印一次这行,结果如下:
Mutation ID
++++++++++++++++++
Gene name
++++++++++++++++++
AA mutation
++++++++++++++++++
显示搜索对象下所有的文字:
1 for dt in soup.select(".inline"):
print dt.get_text()
print '**********************' # 会在显示完 .inline 下面 所有的递归子标签里的文字后,打印一次本行。本例中只打印了一次。也就是本遍历值遍历了一个,已验证
其他关于 find_all() 和 select()
soup.find_all('a') # 找到所有 a 标签,遍历取出
soup.find_all(['a','b']) #任意匹配一个即可返回,
soup.find_all(id = "...") #根据 id 号码查找
soup.find_all("a",class_="...") #查找固定 class 的 a 标签
soup.find_all("a",limit=2) # 限制搜索到的 a 标签的个数,只要前两个
soup.find_all("p",recursive=False) # 只搜索 返回直接子节点。 soup.select("a") #搜索所有 a 标签
soup.select("#idname") # 根据 id 名搜索
soup.select(".classname") # 根据 class 搜索
soup.select(".classname > p > a > ...") # 精准搜索
soup.select("p a[class="..."]") # 搜索 p 标签下的 class为...的 a 标签 14 node.get_text() # 获取节点的文字
.select(a[href='...']) # 获取节点的 href 属性
node.name # 获取节点的 名字
spider(一)的更多相关文章
- spider RPC入门指南
本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...
- Scrapy:为spider指定pipeline
当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...
- spider RPC过滤器
spider支持在请求执行前或完成后进行特殊处理,比如安全性检查.敏感字段混淆等等.为此,spider提供了BeforeFilter和AfterFilter.其执行位置如下图所示: 流水线插件配置在s ...
- spider RPC插件化体系
为了满足灵活扩展的需要,spider支持灵活的自定义插件扩展,从功能上来说,插件和过滤器的差别在于过滤器不会阻止请求的执行同时对于主程序不会有API上的影响(比如servlet 过滤器和监听器)(最多 ...
- spider RPC管理接口
为了在独立管理模式下尽可能的容易运行时排查问题,spider中间件提供了一系列restful api用于动态管理当前节点的路由,下游节点等.目前支持的RESTFUL API如下所示: 功能 服务号 R ...
- spider RPC高级特性
多租户 spider原生支持多租户部署,spider报文头对外开放了机构号.系统号两个属性用于支持多租户场景下的路由. 多租户场景下的路由可以支持下述几种模式: n 系统号: n 系统号+服务号( ...
- spider RPC安全性
spider提供了多重安全保障机制,目前主要支持接入握手校验,报文完整性校验,报文加密,报文长度检查四种机制. 接入认证 spider使用两次握手校验,其握手流程如下: 签名AES加密的方式实现. l ...
- spider RPC开发指南
协议与兼容性 spider使用java语言开发,使用Spring作为IoC容器,采用TCP/IP协议,在此基础上,结合SaaS系统模式的特性进行针对性和重点设计,以更加灵活和高效的满足多租户系统.高可 ...
- spider 配置文件参考
spider有一个配置文件spider.xml,为xml格式,spider.xml采用DTD进行管理,用于管理spider的所有特性.路由.高可用等. 配置文件支持三种不同的方式进行指定: 1. 通过 ...
- spider RPC性能测试报告
测试环境部署结构 测试用例 类 别 说明 请求报文 194字节({"systemId":"PL","appVersion":"qq ...
随机推荐
- [原创]java WEB学习笔记24:MVC案例完整实践(part 5)---删除操作的设计与实现
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Android系统OTA升级包制作【转】
本文转载自:http://blog.csdn.net/dingfengnupt88/article/details/52882788 Android系统升级分为整包升级和差分包升级,整包升级就是将系统 ...
- Shell中的 >/dev/null 2>&1
默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入).标准输出(输出到屏幕).标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2 .那么我们来看看下面的几种重定向方法的区别: 1 ...
- Vim 的命令模式转插入模式
一.在命令模式输入下面的快捷方式: i 在当前光标前插入字符: I 在当前行行首插入字符: a 在当前光标后插入字符: A 在当前行行尾插入字符: o 在当前行下面另起一新行: O 在当前行上面另起一 ...
- Openldap- 大机群身份验证服务
无论在哪个行业,数据安全永远都是摆在首要地位.尤其是在大数据行业上,谁掌握了数据,谁就有可能成为下个亿万富豪的环境中,数据安全更为重要.大数据的安全可以从哪些地方入手,首先可以在身份验证上面入手.在大 ...
- winform 中的Anchor 和 Dock 属性设置
在设计窗体时,这两个属性特别有用,如果用户认为改变窗口的大小并不容易,应确保窗口看起来不显得很乱,并编写许多代码行来达到这个目的,许多程序解决这个问题是地,都是禁止给窗口重新设置大小,这显然是解决问题 ...
- SpringBoot_04_热部署
二.参考资料 1.Spring Boot 系列(六)web开发-Spring Boot 热部署
- PostgreSQL正则及模糊查询优化
1.带前缀的模糊查询 ~'^abc' 可以使用btree索引优化 create index idx_info on table_name(info) 2.带后缀的模糊查询 ~'abc$' 可以使用 ...
- Android: 利用SurfaceView绘制股票滑动直线解决延迟问题
1.背景介绍 最近项目要绘制股票走势图,并绘制能够跟随手指滑动的指示线(Indicator)来精确查看股票价格和日期.如下图所示: 上图中的那条白色直线就是股票的指示线,用来跟随手指精确确定股票的时间 ...
- MarkDown不支持图片放缩。。
![](http://images2015.cnblogs.com/blog/573995/201604/573995-20160430162211050-1357272526.jpg =100x20 ...