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条评论