接到项目需求为爬取豆瓣top250电影数据,主要包含以下四个字段信息:‘电影名称’,‘上映年份’,‘豆瓣评分’,‘点评人数’
本文通过re正则对豆瓣网页数据进行解析提取
import requests
import re
import pandas as pd
df = pd.DataFrame(columns=['电影名称','上映年份','豆瓣评分','点评人数']) #创建表头
#创建空列表用于存放数据
movie_name =[]
first_year =[]
douban_score =[]
rate_peop = []
#UA伪装
headers = {"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"}
#找到分页规律:一页25条电影记录,一共10页,正好250条
for page in range(0,251,25):
#url不要写死,便于分页抓取数据
url =f'https://movie.douban.com/top250?start={page}'
resp = requests.get(url=url,headers=headers).text #获取网页信息
#爬取电影名称数据
obj = re.compile('<li>.*?<span class="title">(?P<name>.*?)</span>'
'.*?<p class="">.*?<br>(?P<year>.*?) '
'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
'.*?<span>(?P<pop>.*?)人评价</span>',re.S)
content = obj.finditer(resp)
for i in content:
#print(i.group("name"),end=" ")
#print(i.group("year").strip(),end=" ")
#print(i.group("score"),end=" ")
#print(i.group("pop"))
dic = i.groupdict()
dic['year'] = dic['year'].strip() #从网页提取出来会有很多空格,此处需要删除空格
#将每抓取的一笔数据都写入的列表里
movie_name.append(dic['name'])
first_year.append(dic['year'])
douban_score.append(dic['score'])
rate_peop.append(dic['pop'])
#将前面创建的df中加载数据
df = pd.DataFrame({'电影名称':movie_name,'上映年份':first_year,'豆瓣评分':douban_score,'点评人数':rate_peop})
#将df中的数据写入到csv中
df.to_csv(".\豆瓣电影top250清单")
最后打开刚刚写入的csv文件里,包含里爬取出来的数据。
项目结束,完结撒花✿✿ヽ(°▽°)ノ✿