python 爬虫篇---->re正则实战豆瓣读书爬取(附带源码)
import requests
import re
# 请求豆瓣读书的网页
def get_html(url):
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
response.raise_for_status()
response.encoding = response.apparent_encoding
return response.text
except:
return "请求失败"
# 解析网页,获取书籍信息
def parse_html(html):
try:
# 正则表达式解析网页
pattern = re.compile(
'<div class="info">.*?title="查看书评".*?>(?P<name>.*?)</a>.*?author">.*?title="查看作者信息".*?>(?P<author>.*?)</a>.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span .*?class="">(?P<people_num>.*?)人评价</span>', re.S)
items = re.findall(pattern, html)
for item in items:
yield {
'name': item[0].strip(),
'author': item[1].strip(),
'rating_num': item[2].strip(),
'people_num': item[3].strip()
}
except:
return "解析失败"
# 保存数据
def save_data(data):
with open('豆瓣读书.txt', 'a', encoding='utf-8') as f:
for item in data:
f.write(str(item) + '\n')
def main():
url = 'https://book.douban.com/subject/1054917/comments/'
html = get_html(url)
data = parse_html(html)
save_data(data)
if __name__ == '__main__':
main()
这段代码首先定义了一个获取网页内容的函数get_html
,然后定义了一个解析网页并提取书籍信息的函数parse_html
,最后定义了一个保存数据的函数save_data
。在main
函数中,这些函数被顺序调用,实现了爬取、解析和保存数据的流程。这个例子展示了如何使用Python的requests库来发送HTTP请求,以及如何使用正则表达式来解析网页并提取所需数据。
评论已关闭