Python-爬虫爬取豆瓣top250数据并写入csv文件

  • Python-爬虫爬取豆瓣top250数据并写入csv文件
  • 效果
  • 整体代码
  • 具体步骤


Python-爬虫爬取豆瓣top250数据并写入csv文件

前两天写了一个爬取豆瓣top250图片的,今天写一个加强版,爬取电影的名称、评分、短评等信息。豆瓣网top250首页链接

效果

先来看看最终的效果:

python csv 追加 写入 python向csv写入数据_xpath

整体代码

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+”这个方法。