import resonse
response = requests.get('https://movie.douban.com/chart', headers=headers)
obj = re.compile(
r'.*?<a class="nbg".*?title="(?P<name>.*?)">.*?'
r'.*?<p class="pl">(?P<year>.*?)\(.*?'
r'.*?<span class="rating_nums">(?P<fen>.*?)</span>.*?'
r'.*?<span class="pl">\((?P<pnum>.*?)人评价',re.S
)
it = obj.finditer(response.text)
with open("movie.csv",mode="w",encoding="utf-8") as f:
cvswriter = csv.writer(f)
for item in it:
dic = item.groupdict()
dic['year']=dic['year'].strip()
cvswriter.writerow(dic.values())
这段代码主要用于从 response.text 中提取特定的信息,并将其写入到一个 CSV 文件中。
首先,通过 re.compile 函数创建了一个正则表达式对象 obj ,该正则表达式用于匹配以下内容:
- <a class="nbg" 标签中 title 属性的值,并将其命名为捕获组 name 。
- <p class="pl" 标签中的内容,并将其中的一部分命名为捕获组 year 。
- <span class="rating_nums" 标签中的内容,命名为捕获组 fen 。
- <span class="pl"> 标签中关于人数评价的部分,命名为捕获组 pnum 。
然后,使用 obj.finditer(response.text) 来查找所有匹配的结果,并将结果存储在迭代器 it 中。
接着,使用 with open 语句以写入模式打开一个名为 movie.csv 的文件,并创建一个 csv.writer 对象 cvswriter 。
在循环中,对于每个匹配结果 item ,通过 item.groupdict() 获取捕获组的字典 dic ,并对 dic 中 'year' 的值进行去除两端空白字符的处理。最后,使用 cvswriter.writerow(dic.values()) 将处理后的字典值以一行的形式写入到 CSV 文件中。