爬取豆瓣电影top250(正则表达式)
进入https://movie.douban.com/top250?,查看网页源代码。查看HTML的标签,找一个最近的且能定位到电影信息的标签。<li>。然后找一个可以定位电影名或者年份前面的部分。
re.compile(r<li>.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">
r.*?<br>(?P<year>.*?) .*?,re.S)
利用正则finditer去找标记的内容name,year。如果直接去输出的话,会有一点小问题,这个网页年分前面是空白回车。此时输出的内容会多了一行。所以要进行修改
print(i.group(year).strip())
网页的第二页和第三页发现只是start多了25其他不变。这时我们做一个循环爬取网页全部代码保存起来。
for i in range(10):
query = i*25
url = fhttps://movie.douban.com/top250?start={query}&filter=
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.43"
}
resp = requests.get(url, headers=head)
#print(resp.text)
abc = resp.text
with open(top250.txt,a,encoding=utf-8) as f:
print(abc,file=f)
resp.close()
爬取网页的全部代码之后,利用上面的正则表达式规则进行筛选就行了。
完整代码:
import requests
import re
import csv
import os
for i in range(10):
query = i*25
url = fhttps://movie.douban.com/top250?start={query}&filter=
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.43"
}
resp = requests.get(url, headers=head)
#print(resp.text)
abc = resp.text
with open(top250.txt,a,encoding=utf-8) as f:
print(abc,file=f)
resp.close()
fp = open(top250.txt,encoding=utf-8)
c = fp.read()
fp.close()
page_contnet =c
patten = re.compile(r<li>.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">
r.*?<br>(?P<year>.*?) .*?,re.S)
result = patten.finditer(page_contnet)
f = open(doubantop250.csv,w)
csvwriter = csv.writer(f)
for i in result:
dic = i.groupdict()
dic[year]=dic[year].strip()
csvwriter.writerow(dic.values())
f.close()
print(over)
