今天我们继续通过正则表达式解析页面源代码,获取的网页为豆瓣TOP250,具体网址为:https://movie.douban.com/top250
今天的主要思路:
1、获取网页源代码;
2、通过正则表达式解析网页的信息;
3、将获取的内容存到本地文件中。
网页的信息截图:
经过爬取后的数据结果截图:
下面是详细的代码,里面有相关的注释,里面有几个关键的知识点大家可以细细的揣摩一下,比如:for循环,open()、f.write()、re.compile()、re.finditer()、re.S。下面是详细的代码,有什么不懂的可以直接在下面留言。最后建议大家自己敲的时候不要一次性全部敲完,按照上面三步一步一步编写:
# 豆瓣TOP250数据抓取
# 1、抓取豆瓣TOP250电影信息,拿到页面源代码
# 2、通过re解析提取数据
# 3、存储解析的数据
import requests
import re
f = open("TOP250.cvs", mode="w", encoding="utf-8")
for num in range(0, 250, 25): # 循环获取访问地址
url = f"https://movie.douban.com/top250?start={num}&filter="
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
}
resp = requests.get(url, headers=headers)
resp.encoding = "utf-8"
pageSource = resp.text
# 编写正则表达式
# re.S可以让正则中的.匹配换行符
obj = re.compile(r'<div class="item">.*?<span class="title">(?P<moviename>.*?)</span>'
r'.*?导演: (?P<actor>.*?) .*?'
r'<br>(?P<year>.*?) '
r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
r'.*?<span>(?P<num>.*?)人评价</span>', re.S)
# 进行正则表达式
result = obj.finditer(pageSource);
for item in result:
moviename = item.group("moviename")
actor = item.group("actor")
year = item.group("year").strip() # 去掉字符串两端的空白
score = item.group("score")
num = item.group("num")
# 将获取的数据存取csv文件中
f.write(f"{moviename},{actor},{year},{score},{num}\n")
print("豆瓣TOP250提取完毕!")
f.close() # 关闭文件
resp.close() # 关闭响应
标签:group,item,爬虫,num,re,豆瓣,004,TOP250
From: https://www.cnblogs.com/stone-wei/p/16949734.html