是蓝先生 关注正则表达式
2016.04.20 11:26* 字数 930 阅读 37205评论 11喜欢 10mongodb
今天是4.20号。数据库
前天晚上看到蒋方舟的一句话:函数
不要左顾右盼。慢慢积累,慢慢写吧。毕竟除了这样单调的努力,我什么也作不了。学习
而如今的本身就是个十足的壁花少年。spa
在进入正题前先说一下每次完成代码后,能够用ctrl+alt+l对代码进行自动格式规范化。.net
在爬取网页中有用的信息时,一般是对存在于网页中的文本或各类不一样标签的属性值进行查找,Beautiful Soup中内置了一些查找方式,最经常使用的是find()和find_all()函数。[文献引自http://blog.csdn.net/abclixu123/article/details/38502993 ]。 同时经过soup.find_all()获得的全部符合条件的结果和soup.select()同样都是列表list,而soup.find()只返回第一个符合条件的结果,因此soup.find()后面能够直接接.text或者get_text()来得到标签中的文本。代理
1、find()用法
find(name,attrs,recursive,text,**wargs)
这些参数至关于过滤器同样能够进行筛选处理,不一样的参数过滤能够应用到如下状况:
查找标签,基于name参数
查找文本,基于text参数
基于正则表达式的查找
查找标签的属性,以及基于attrs参数
基于函数的查找code
<ul id="producers"> <li class="producerlist"> <div class="name">plants</div> <div class="number">100000</div> </li> <li class="producerlist"> <div class="name">algae</div> <div class="number">100000</div> </li> </ul>
以上面的例子来看:
(1)ul,li,div这些就是标签;blog
用法p=soup.find('ul') ,那么返回结果是第一个ul标签以及<xx>...</xx>的全部内容,即上面的代码;注意若用p=soup.find('ul').get_text()那么结果不是...的全部内 容,而应该是plants 10000 algae 10000,即...中的标签不算text文本。
(2)<xx>...</xx>之间的内容就是文本;
基于文本内容的查找也能够用soup.find(),但必须用到参数text,
用法p=soup.find(text='algae'),print(p)获得的结果就是algae
(3)正则表达式后面本身另外去学习;
(4)ul id="producers">中的id即标签属性,那么咱们能够查找具备特定标签的属性;
用法p=soup.find('ul', id="producers"),那么能够获得<xx>...</xx>的全部结果,其特色是把标签更一步精确化以便于查找。
对于大多数的状况能够用上面的方法解决,可是有两种状况则要用到参数attrs:一是标签字符中带有-,好比data-custom;二是class不能看做标签属性。解决的办法是在attrs属性用字典进行传递参数:
soup.find(attrs={'data-custom':'xxx'})以及 soup.find(attrs={'class':'xxx'})
(5)基于函数的查找也暂时搁置。
2、find_all()用法
应用到find()中的不一样过滤参数同理能够用到find_all()中,相比find(),find_all()有个额外的参数limit,以下所示:
p=soup.find_all(text='algae',limit=2)
实际上find()也就是当limit=1时的find_all()。
关于find和find_all的用法先学习这么多,若是后面有涉及到更深刻再去研究。
到今天基本把赶集网北京地区的全部内容爬了一遍,但其中涉及到的使用代理ip时仍是会报错,等这周日听课时来解决。立刻就要用爬取的内容进行统计分析了,因此下一篇会学习非关系型数据库mongodb的知识。