import csv
import re
import requests
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.56'
}
# 正则
# 需要注意的是这个正则是一层一层的往下写的,不是单独出来的,每一段后面记得要接.*?不然程序会死循环
obj = re.compile(r'<div class="info">.*?<span class="title">.*?(?P<title>.*?)</span>.*?'
r'...<br>.*?(?P<year>.*?) .*?'
r'property="v:average">.*?(?P<score>.*?)</span>.*?'
r'<span>(?P<num>.*?)人评价</span>', re.S)
f = open('data.csv', mode='w', encoding='utf-8', newline='') # newline = ''
#备注:如果没有指定 newline=‘’,则嵌入引号中的换行符将无法正确解析,并且在写入时,使用 \r\n 换行的平台会有多余的 \r 写入。
csvwriter = csv.writer(f)
# 请求前TOP250个电影
# 它的url start是0,25,50最大时250,所以步长25,0开始250结束
for i in range(0, 250, 25):
url = f'xxx/top250?start={i}'
print(i)
# 请求 并返回成text
resp = requests.get(url=url, headers=headers)
page_text = resp.text
# print(page_text)
result = obj.finditer(page_text)
for it in result:
# print(it.group('title'))
# print(it.group('year').strip()) # 此数据如果不做任何处理会出现前后有很大的空格
# # strip 去除前后空格 并返回字符串
# print(it.group('score'))
# print(it.group('num'))
dic = it.groupdict() # 统一返回,返回成字典包装起来
dic['year'] = dic['year'].strip() # 老样子,去除前后空格
# print(dic)
csvwriter.writerow(dic.values()) # 放到csv文件里
f.close()
resp.close()
print("完成!")
标签:group,评分,text,抓取,dic,url,print,csv,TOP250 From: https://www.cnblogs.com/Wesuiliye/p/17162662.html