代码:
import requests
import re
import csv
# 获取网页内容
for start_num in range(0,250,25):
url=f"https://movie.douban.com/top250?start={start_num}&filter="
head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"}
response=requests.get(url,headers=head)
content=response.text
# 解析网页内容
# 预加载正则;精细筛选用分组
obj=re.compile(r' <a href=".*?" class="">.*?<span class="title">(?P<name>.*?)</span>'
r'.*?<p class="">.*?<br>.*?(?P<year>\d+).*? .*?</p>'
r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
r'.*?<span>(?P<num>.*?)人评价</span>',re.S)
iter=obj.finditer(content)
f=open("data.csv",mode="a",encoding="utf-8")
csvwriter=csv.writer(f)
for i in iter:
# print(i.group("name"))
# print(i.group("year"))
# print(i.group("score"))
# print(i.group("num"))
dic=i.groupdict()
csvwriter.writerow(dic.values())
f.close()
print("over!")
注意:
1、有些年份是“1995(中国大陆)”这样子的,后面不直接跟 ,所以要用.*?来省略掉无关内容,也可以省略掉空格。
2、多个r' '是用来换行展示的
3、CSV(Comma-Separated Values)是一种常见的文件格式,用于存储表格数据。
它是一种纯文本格式,每行代表表格中的一行数据,每个字段之间用逗号分隔。
Python标准库中含有csv模块,可以直接import csv
4、
f=open("data.csv",mode="a",encoding="utf-8")
csvwriter=csv.writer(f)
mode="a"表示以追加模式打开文件
encoding="utf-8"指定了文件的编码格式为UTF-8,这样可以处理中文等特殊符号
csv.writer(f)创建了一个CSV writer对象,它用于向CSV文件中写入数据
这个CSV writer对象允许你使用它的方法(比如“writerow()”)将列表或元组的数据写入CSV文件中
5、
dic=i.groupdict()
csvwriter.writerow(dic.values())
groupdict()返回一个包含所有命名组的字典,其中键是组名,值是匹配到的内容
(比如:"name": "***", "year": "***", "score": "***", "num": "***")
然后将结果保存到一个叫“dic”的变量中
dic.values()返回字典中所有的值,作为一个迭代器
csvwriter.writerow():通过使用CSV writer对象csvwriter的writerow方法,将数据写入对象关联的文件中(注意:参数是一个可迭代对象)