用爬虫爬取书单

该文章介绍了一个Python爬虫项目,通过requests和re模块,从豆瓣网站抓取书籍的封面图片和名称。爬虫针对每个页面的li类为mediaclearfix的元素,利用正则表达式匹配img的src属性获取图片链接,a标签的内容获取书名。抓取的数据保存到文本文件,并下载图片存储到本地。
摘要由CSDN通过智能技术生成

当今时代,读书已成为一种潮流,现在,我们用爬虫去爬取书单的照片和名称

import requests

先导入request 模块 ,这是写爬虫必要的

接下来对目标网站进行分析发现所有的数据都写在如下图中

本次解析数据是采用正则

src里面存放的是书的图片,a标签里面存放的是书名字,是我们所需要的

用正则解析数据

z = '<li\sclass="media clearfix".*?>.*?<img\sclass="subject-cover".*?src="(.*?)"/>.*?<a\sclass="fleft"\shref=".*?">(.*?)</a>'

本次项目的所有代码

import requests
import re

class Douban():
    def __init__(self):
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/105',
        }
     def get_data(self,url):
        response=requests.get(self.page_url,headers=self.headers)
        r=response.text
        return r

      def parse_data(self,data):
         z = '<li\sclass="media clearfix".*?>.*?<img\sclass="subject-cover".*?src="(.*?)"/>.*?<a\sclass="fleft"\shref=".*?">(.*?)</a>'
        result = re.findall(z, data, re.S)
        for sk in result:
            img = sk[0]
            name = sk[1]
            print(img)
            print(name)
            print('===' * 10)
            with open('db1_data', 'a', encoding='utf-8') as f:
                f.write(img + '\n')
                f.write(name + '\n')
                f.write('\n')
                
                #再次向图片发起请求,获取二进制数据
                img_data = requests.get(img).content
                print(img_data)

                if not os.path.exists('DATAS'):
                    os.makedirs('DATAS')
                with open('DATAS/{}.jpg'.format(name), 'wb') as f:
                    f.write(img_data)
     def main(self):
        #写翻页的代码
        url = 'https://book.douban.com/latest?subcat=%E5%85%A8%E9%83%A8&p={}'
        for i in range(1, 3):
            page_url = url.format(i)
            print('正在打印第{}页'.format(i))
            response=self.get_data(page_url)
            self.parse_data(response)
        
if __name__=='__main__':
     a=Douban()
     a.main()

在main()方法里面写翻页

运行后就会得到我们要的书单名和图片

以下是正则的语法 本次用最多的是 \s 表示匹配空白字符

正则里面出现的 ( .*?) 表示匹配所有,将我们要的内容用( .*?)表示出来,在用字典取值的方式

把我们书写的数据一个一个拿出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值