豆瓣网电影信息的抓取

分析

在这里插入图片描述
在这里插入图片描述
通过上面两张图片可以发现
第一页url:https://movie.douban.com/top250?start=0&filter=
第二页url:https://movie.douban.com/top250?start=25&filter=

由此类推
第n页url
https://movie.douban.com/top250?start=n-1然后×25&filter=

代码

import requests, csv		# 使用requests请求,csv保存数据
from lxml import etree		# 使用xpath解析
import multiprocessing		# 使用多进程加快爬虫速度


class DoubanSpider:

    # 设置请求头
    def __init__(self):
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
        }


    # 定义一个发送请求并返回响应的实例方法,方便调用
    def get_response(self, url):
        response = requests.get(url, headers=self.headers)
        response.encoding = 'utf-8'
        return response
        


    #  提取数据
    def get_data(self, url):
        response = self.get_response(url)
        html = etree.HTML(response.text)
        hrefs = html.xpath('//div[@class="hd"]/a/@href')                    # 电影url链接
        movies_name = html.xpath('//div[@class="hd"]/a/span[1]/text()')     # 电影名称
        score = html.xpath('//div[@class="bd"]//span[2]/text()')            # 电影评分
        for movie_name, movie_url, movie_score in zip(movies_name, hrefs, score):
            print('正在保存' + movie_name)
            self.save_local(movie_name, movie_url, movie_score)


    # 将数据保存到本地
    def save_local(self, movie_name, movie_url, movie_score):
        with open(r'C:\Users\thomas\Desktop' + '\\豆瓣排名.csv', 'a', encoding='utf-8') as f:
            w = csv.writer(f)
            w.writerow([movie_name, movie_url, movie_score])  # 每一条数据


if __name__ == '__main__':
    pool = multiprocessing.Pool(30)                                         # 30个进程
    url = "https://movie.douban.com/top250?start={}&filter="
    spider = DoubanSpider()
    pool.map(spider.get_data, [url.format(i * 25) for i in range(100)])     # 异步抓取99页

数据展示

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值