import requests
import re
f = open("豆瓣250电影.csv", mode="w", encoding='utf-8')
url = "https://movie.douban.com/top250?start=200&filter="
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
}
resp = requests.get(url) # <Response [418]> 反爬机制 headers 解决
resp = requests.get(url, headers=headers)
# resp.encoding = 'utf-8' # 解决乱码问题.
pageSource = resp.text
# 编写正则表达式 r'xxxxxx' 用单引号,避免跟""冲突
# re.S 可以让正则中的.匹配换行符 (让.也涵盖换行) 指定re规则
obj = re.compile(r'<div class="item">.*?<span class="title">(?P<name>.*?)</sp'
r'an>.*?导演: (?P<dao>.*?) .*?<br>'
r'(?P<year>.*?) .*?<span class="rating_num" property="v:average">'
r'(?P<score>.*?)</span>.*?<span>(?P<num>.*?)人评价</span>', re.S)
# 进行正则匹配 通过这个制定的re规则,来处理 resp.text数据
result = obj.finditer(pageSource)
for item in result:
name = item.group("name")
dao = item.group("dao")
year = item.group("year").strip() # 去掉字符串左右两端的空白 空格----1949,位置在最前面。随意会有空格。输出的时候屏蔽掉
score = item.group("score")
num = item.group("num")
f.write(f"{name},{dao},{year},{score},{num}\n") # 如果觉着low. 可以更换成csv模块. 进行数据写入
f.close()
resp.close()
print("豆瓣TOP250提取完毕.")
Python DB正则爬虫
最新推荐文章于 2024-07-31 14:30:10 发布