爬虫-豆瓣电影-Xpath定位-影评写入CSV文件

import requests
import lxml.html#Xpath就是根据一定的网页地址定位到某个值
import csv
import os


#访问url,获取网页信息
def get_douban_movie(taget_url):
    headers = {  # headers就是一个请求头
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    }
    req = requests.get(url=taget_url, headers=headers)

    req.encoding='utf-8'
    return req.content


#从网页信息中,选择class=info中的整段信息,再从info中获取title,link等信息
#创建一个列表,将每个电影的内容存入一个字典中,将所有书的字典放在一个列表里面
def get_movie_info(source):
    selector = lxml.html.document_fromstring(source)
    info_data=selector.xpath('//div[@class="info"]')
    info_list=[]
    for eachinfo in info_data:
        info_dict={}
        title=eachinfo.xpath('div[@class="hd"]/a/span[@class="title"]/text()')[0]
        link=eachinfo.xpath('div[@class="hd"]/a/@href')[0]
        star=eachinfo.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')[0]
        quote=eachinfo.xpath('div[@class="bd"]/p/span[@class="inq"]/text()')[0]
        info_dict['title']=title
        info_dict['link']=link
        info_dict['star']=star
        info_dict['quote']=quote
        info_list.append(info_dict)
    return info_list

#将内容写入到csv文件中,首先判断目录是否存在,不存在则创建
#将文本内容写入到csv文件中,使用的读写方式为w,如果是二进制类型的,则使用ab方式
#将列表中的每个字典内容,单次写入到文件中,如果不想要文件中有空行,则设置newline=""
def create_csv(info_list):
    if not os.path.exists('./MovieCsv'):
        os.mkdir('MovieCsv')
    with open('./MovieCsv/movieDouban.csv',"w",newline="") as f:
        writer=csv.DictWriter(f,fieldnames=['title','link','star','quote'])
        writer.writeheader()
        for eachmove in info_list:
            writer.writerow(eachmove)

#主函数调用
#其中观察url链接中的数字变化,和页数产生的关联,从而使用循环来完成多页的爬虫
#循环控制页数for i in range(5)
if __name__ == '__main__':
    taget_url = 'https://movie.douban.com/top250?start={}&filter='# 当前页数-1*25,此处的0是变量

    taget_list=[]
    for i in range(4):
        count = i * 25
        taget_urlq = taget_url.format(count)
        taget_data=get_douban_movie(taget_urlq)
        taget_list+=get_movie_info(taget_data)
    create_csv(taget_list)

成果截图:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值