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

 

 

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

关于豆瓣历史书籍

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

 

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

 

一、先分析分析

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,点击元素(有些是元素英文的自己去翻译翻译吧)

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

 

 

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

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

 

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

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

 

 

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

 

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

 

 

 

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

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

 

 

 

图片链接

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

 

 同理得到其它信息

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

 

 二、伪装

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

做一个请求头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])


运行结果:(部分,太长无法全部截取)
python爬虫学习基础之re正则案例

 

 

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

 

 
上一篇:集合增强for


下一篇:JDBC查询语句注意点