BeautifulSoup中find,find_all,select的使用

网络爬虫 2018-09-13 1338

BeautifulSoup是python的一个数据处理的库,通常搭配requests来实现数据的采集。功能强大,除了有点慢(相对于lxml等),是处理静态数据的不二选择。

以下通过解释一个简单的爬虫来演示。写博客是为了自己更好的查询和记忆

import requests  
from bs4 import BeautifulSoup

url = http://quotes.toscrape.com/  
response = requests.get(url)  
html = BeautifulSoup(response.content, lxml)  
text = html.find_all(span, class_=text)  
text2 = html.find(span, class_=text)  
text3 = html.find(class_=text)  
print(text)  
print(type(text2))  
print(text2)  
print(text3)  

1.find的使用

find方法在提取数据时只返回一个数据,类型为class bs4.element.Tag

class bs4.element.Tag
The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking
The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking

从上面的代码中可以看到在find时加不加同样可以找到数据,并且返回数据都只有一个。

提取数据

text2 = html.find(span, class_=text).get_text()
text3 = html.find(class_=text).get_text()
text3 = html.find(class_=text).string

使用get_text()得到数据,也可以使用string来得到数据。

2.find_all

从上面可以看出find_all可以提取出包含该class的所有数据,数据类型为class bs4.element.ResultSet,返回数据为list

提取链接

tags = html.find(class_=tags)
tag = tags.find_all(class_=tag)

print(tag)
print(type(tag))

结果:

[a class=tag href=/tag/change/page/1/change/a, a class=tag href=/tag/deep-thoughts/page/1/deep-thoughts/a, a class=tag href=/tag/thinking/page/1/thinking/a, a class=tag href=/tag/world/page/1/world/a]  
class bs4.element.ResultSet  

提取链接:

for i in tag:  
    x = i[href]  
    print(i.attrs[href])  
    print(x)  

结果都是:
/tag/change/page/1/
/tag/deep-thoughts/page/1/
/tag/thinking/page/1/
/tag/world/page/1/

上面也可以处理html的属性,比如name,id,src等。

3.select

select是一个支持css选择器的方法,可以传入css选择器来匹配html内容。
text4 = html.select(.text)

返回的是一个list,内容与find_all一样。如果要找到这个网页中的名言作者信息,可以这样
author = html.select(small),
因此select可以直接匹配标签,只要遵循css选择器,一般来说,网页数据都可以找到。

标签:网络爬虫

文章评论

评论列表

已有0条评论