python爬虫学习基础之re正则案例

2021/12/20 1:20:37

本文主要是介绍python爬虫学习基础之re正则案例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

 

爬取的目标对象:豆瓣图书标签: 历史 (douban.com)

关于豆瓣历史书籍

 

 爬取该标签下的书籍信息,这里不做保存处理,只打印显示信息。

 

一、先分析分析

1、链接

首先它是分成许多页的,

第一页的链接:https://book.douban.com/tag/%E5%8E%86%E5%8F%B2

第二页:           https://book.douban.com/tag/%E5%8E%86%E5%8F%B2?start=20&type=T

第三页:           https://book.douban.com/tag/%E5%8E%86%E5%8F%B2?start=40&type=T

第四页:           https://book.douban.com/tag/%E5%8E%86%E5%8F%B2?start=60&type=T

 

可以看到第一页除外,其它的只有start=不同,都是20的倍数,把start=0试一下确实是第一页

可以猜测:tag就是标签标签后面到?之间的就是 '历史' 的某种编码。每一页有20本书籍

2、书籍信息

开发者win+F12,点击元素(有些是元素英文的自己去翻译翻译吧)

 

 

找到对应的位置点击一下箭头位置(ctrl+shift+c)

 

然后再用鼠标定位到你所需要提取信息的位置,他就会变色,再点击一下,开发者页面的元素就会跳转到对应的位置

 

 

 

 同样的你把鼠标放到哪里,网页对应的位置也会变颜色

 

 

 

可以知道在如图中的 li标签里面就包含一本书的所有信息

 

 

 

图片链接

 

 同理得到其它信息

 

 二、伪装

豆瓣有反爬机制,要伪装。

做一个请求头headers,这里只需要User-Agent即可。

 

三、实现代码(注意本代码仅用于学习交流,务必遵守相关协议法律,切勿用于商业)

 

import requests
import re

# 改变start=的值就可以改变页数但要记住,必须是20的倍数
url='https://book.douban.com/tag/%E5%8E%86%E5%8F%B2?start=0&type=T'

# 请求头变量
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62'
}

# 这里的headers参数就是伪装成浏览器请求头的参数,向服务器请求
response = requests.get(url,headers=headers)

text = response.text


''' re解析网页 '''
# 必须要有""否则匹配不到。
# 有些事杂余的书本名字,试出来是[:20],下面有些也有此情况,就不一一解释了
book_title = re.findall('title="(.*?)"',text)[:20]

# 书籍图片链接
book_pic_src = re.findall('src="(.*?)"',text)[7:-6]

# 出版信息,要加\n和空格(数量一致)要不然会返回空,你也可以通过其它方法试一下
book_pub = re.findall('<div class="pub">\n        \n  \n  (.*?)\n',text)

# 评价分数
book_rating_nums = re.findall('<span class="rating_nums">(.*?)</span>',text)

# 评价人数
book_number =      re.findall('<span class="pl">\n        (.*?)\n',text)


# 遍历
for i in range(len(book_title)):
    print('--------------------------- 每本书的分界线 ---------------------------')
    print('书名:',book_title[i])
    print('书本图片链接:',book_pic_src[i])
    print('出版信息:',book_pub[i])
    print('豆瓣评分:',book_rating_nums[i])
    print('评价人数:',book_number[i])


运行结果:(部分,太长无法全部截取)

 

 

这里就不存储了,感兴趣可以尝试一下。可以去找那种豆瓣电影top250的爬虫代码,一般都会有存储。

 

 


这篇关于python爬虫学习基础之re正则案例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程