直接上代码,爬取豆瓣读书的信息
import requests,re
from bs4 import BeautifulSoup
headers={'User-Agent':'....'}#写下你的user-agent
def getdata(url):
html=requests.get(url,headers=headers)
selector=BeautifulSoup(html.text,'lxml')
objs=selector.findAll('a',href=re.compile(r'.*?book.douban.com/subject/\d{7}/'))
#在这里,我用了正则表达式的一个方法,re.compile可以把正则字符串编译成正则表达式对象,里面包含的是所有符合条件的a标签的正则表达式,而findAll用于查找,这个方法会搜索整个字符串,然后返回匹配compile的所有内容
#返回的形式如下:[<a class="nbg" href="https://book.douban.com/subject/1084336/" onclick="moreurl(this,{i:'0',query:'',subject_id:'1084336',from:'book_subject_search'})"><img class="" src="https://img1.doubanio.com/view/subject/m/public/s1237549.jpg" width="90"/>
</a>]可以看出这是一个列表,每一个标签里面包含了该标签的所有属性
for obj in objs:
if 'title' in obj.attrs:
#用'title'可以把所有书籍提取出来,因为只有title这个属性是唯一的
print(obj)
我们现在试着爬取豆瓣读书的童话类书籍
getdata('https://book.douban.com/tag/%E7%AB%A5%E8%AF%9D')
总而言之,我们可以这样写
finaAll('标签名',属性=re.compile(正则表达式))
也可以是re.compile().findall()
返回一个可迭代的列表,最棒的是它里面包含了我们需要或者不需要的所有属性,所以我们可以用attrs提取