Python-爬虫爬取豆瓣top250数据并写入csv文件
- Python-爬虫爬取豆瓣top250数据并写入csv文件
- 效果
- 整体代码
- 具体步骤
Python-爬虫爬取豆瓣top250数据并写入csv文件
前两天写了一个爬取豆瓣top250图片的,今天写一个加强版,爬取电影的名称、评分、短评等信息。豆瓣网top250首页链接
效果
先来看看最终的效果:
整体代码
import requests
from lxml import etree
import csv
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
film_title_list=[]
film_grade_list=[]
film_quote_list=[]
c=open(r'D:\douban\douban.csv','a+',newline='')
fieldnames=['title','grade','quote']
writer=csv.DictWriter(c,fieldnames=fieldnames)
writer.writeheader()
page=0
while page <=225:
res=requests.get('https://movie.douban.com/top250?start='+str(page)+'&filter=',headers=headers)
html=res.text
res_xpath=etree.HTML(html)
film_title_list.extend(res_xpath.xpath('//span[@class="title"][1]/text()'))
film_grade_list.extend(res_xpath.xpath('//span[@class="rating_num" and @property="v:average"]/text()'))
for i in range(1,26):
data_quote=res_xpath.xpath('//li[%d]/div/div[2]/div[@class="bd"]/p[2]/span/text()'%i)
if data_quote:
film_quote_list.extend(data_quote)
else:
kongbai=' '
film_quote_list.extend(kongbai)
c=open(r'D:\douban\douban.csv','a+',newline='')
for q in range(page,page+25):
writer.writerow({'title': film_title_list[q],'grade': film_grade_list[q],'quote': film_quote_list[q]})
c.close()
page=page+25
print('end')
具体步骤
和爬取图片不同,这次爬取电影的数据并没有采用正则表达式的方法,也尝试了这种方法,但是代码不是很简洁,效果也不是很理想。所以就采用了XPath这个方法,XPath就是一门在 XML 文档中查找信息的语言。这里不对XPath这个方法多做解释,XPath这个方法是爬虫时比正则表达式用的更频繁的一个方法,可以查到很多关于它的资料。如果不想过多了解,我觉得知道怎么使用相对路径找到信息就够了。
- 获取电影各项信息
这里主要使用了两个库requests和etree。requests用来发送请求,etree用来解析XML文档。然后用xpath这个方法获取各项信息,分别放入film_title_list、film_grade_list、film_quote_list三个列表里。xpath相比正则表达式,使用起来会使代码简洁很多。这里如果不是有几部电影的短评是没有的,代码会短很多。获取信息要注意,之前提到的有的电影是没有短评的,所以这里要加上一个判断,当电影没有短评时,给列表加入一个空值,保证每个页面的短评列表都有25个值,避免下面写入的时候报错。 - 将信息写入csv文件
写入时采用DictWriter这个方法,在最开始的时候先写入一个表头字段,然后分别遍历每张页面的三个列表,写入csv文件。要注意写入的时候要采用“a+”这个方法。