浅谈Python爬虫里的compile与findAll合用

直接上代码,爬取豆瓣读书的信息

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/" οnclick="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提取
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值