爬虫——scrapy框架爬取多个页面电影的二级子页面的详细信息

Scrapy实战- Scrapy框架爬取豆瓣电影top250 scrapy框架 爬取豆瓣电影排名,数据保存至MySQL数据库中 阅读详情

需求:

  • scrapy框架,爬取某电影网页面的每个电影的一级页面的名字
  • https://www.55xia.com/
  • 爬取每部电影二级页面的详细信息
  • 使用代理ip
  • 保存日志文件
  • 存为csv文件

总结:

1、xpath解析使用extract()的各种情况分析
https://blog.youkuaiyun.com/nzjdsds/article/details/77278400

2、xpath用法注意的点:

div[not(contains(@class,"col-xs-12"))]

class属性不包括"col-xs-12"的div标签
https://blog.youkuaiyun.com/caorya/article/details/81839928?utm_source=blogxgwz1

3、二次解析时,用meta参数字典格式传递第一次解析的参数值。

 # meta 传递第二次解析函数
 yield scrapy.Request(url=url, callback=self.parse_detail, meta={'item': item})

4、存为csv文件:

import csv
csv.writer
writerow

https://blog.youkuaiyun.com/qq_40243365/article/details/83003161

5、空行加参数newline='',

self.f=open('./movie.csv','w',newline='', encoding='utf-8')

6、伪装UA,保存日志,编码格式
settings里设置

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'
FEED_EXPORT_ENCODING = 'utf-8-sig'
LOG_LEVEL = 'ERROR'
LOG_FILE = 'log.txt'
ROBOTSTXT_OBEY = False

7、代理ip中间件

class MyMiddleware(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = 'https://157.230.150.101:8080'

settings设置:

DOWNLOADER_MIDDLEWARES = {
   'movie.middlewares.MyMiddleware': 543,
}

代码:

在这里插入图片描述

movieinfo.py

import scrapy
from movie.items import MovieItem


class MovieinfoSpider(scrapy.Spider):
    name = 'movieinfo'
    # allowed_domains = ['www.movie.com']
    start_urls = ['https://www.55xia.com/movie']
    page = 1
    base_url = 'https://www.55xia.com/movie/?page={}'

    # 解析二级子页面
    def parse_detail(self, response):

        # 导演可能不止一人,不用extract_first(),拼接成字符串
        directors = response.xpath(
            '/html/body/div[1]/div/div/div[1]/div[1]/div[2]/table/tbody/tr[1]/td[2]//a/text()').extract()
        directors = " ".join(directors)
        movieType = response.xpath(
            '/html/body/div[1]/div/div/div[1]/div[1]/div[2]/table/tbody/tr[4]/td[2]/a/text()').extract_first()
        area = response.xpath(
            '/html/body/div[1]/div/div/div[1]/div[1]/div[2]/table/tbody/tr[5]/td[2]//text()').extract_first()
        time = response.xpath(
            '/html/body/div[1]/div/div/div[1]/div[1]/div[2]/table/tbody/tr[7]/td[2]//text()').extract_first()
        score = response.xpath(
            '/html/body/div[1]/div/div/div[1]/div[1]/div[2]/table/tbody/tr[9]/td[2]//a/text()').extract_first()

        # 取出meta的item
        item = response.meta['item']
        print('二级子页面:', item['name'])

        item['directors'] = directors
        item['movieType'] = movieType
        item['area'] = area
        item['time'] = time
        item['score'] = score
        yield item

    def parse(self, response):
        """
        获取超链接
        导演,编剧,主演,类型,地区,语言,上映时间,别名,评分
        :param response:
        :return:
        """
        div_list = response.xpath('/html/body/div[1]/div[1]/div[2]/div[not(contains(@class,"col-xs-12"))]')
        for div in div_list:
            name = div.xpath('./div/div/h1/a/text()').extract_first()

            print('已找到:',name)

            url = div.xpath('.//div[@class="meta"]/h1/a/@href').extract_first()
            url = "https:" + url
            # 实例化item对象并存储
            item = MovieItem()
            item['name'] = name
            # meta 传递第二次解析函数
            yield scrapy.Request(url=url, callback=self.parse_detail, meta={'item': item})

        # 完成每页之后开始下一页
        if self.page < 3:
            self.page += 1
            new_url=self.base_url.format(self.page)
            yield scrapy.Request(url=new_url, callback=self.parse)

items.py

import scrapy


class MovieItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = scrapy.Field()
    directors = scrapy.Field()
    movieType = scrapy.Field()
    area = scrapy.Field()
    time = scrapy.Field()
    score = scrapy.Field()

middleware.py


class MyMiddleware(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = 'https://157.230.150.101:8080'

pipelines.py

import csv


class MoviePipeline(object):

    def open_spider(self, spider):
        print('开始存储')
        self.f=open('./movie.csv','w',newline='', encoding='utf-8')
        self.writer= csv.writer(self.f)
        self.writer.writerow(['name','directors','movieType','area','time','score'])

    def process_item(self, item, spider):
        print('正在写入')
        self.writer.writerow([item['name'],item['directors'],item['movieType'],item['area'],item['time'],item['score']])
        return item

    def close_spider(self, spider):
        self.f.close()
        print('保存完成')

结果:

在这里插入图片描述

附加:

Excel和CSV格式文件的不同之处
https://blog.youkuaiyun.com/weixin_39198406/article/details/78705016

crawlspider可以改进:

crawlspider更加高效,直接写个正则,可以提取页面符合规则的所有url,直接解析。

  • 创建工程scrapy startproject 工程名
  • cd 该文件夹
  • 创建爬虫文件 scrapy genspider -t crawl 爬虫文件名 网址
  • 主要是rule比较牛

在这里插入图片描述

  rules = (
        Rule(LinkExtractor(allow=r'/movie/\?page=\d+'), callback='parse_item', follow=False),
    )
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class TtSpider(CrawlSpider):
    name = 'tt'
    # allowed_domains = ['www.baidu.com']
    start_urls = ['https://www.55xia.com/movie']

    rules = (
        Rule(LinkExtractor(allow=r'/movie/\?page=\d+'), callback='parse_item', follow=False),
    )
    '''
    LinkExtractor(allow=r'Items/') 实例化一个链接提取器的对象,根据allow的正则表达式来提取指定内容。
    Rule()实例化一个规则解析器对象,对Link提取的链接发起请求,获取链接对应的页面内容,交给callback解析
    follow 表示是否在提取到的url链接页面再次以相同规则提取,
    scrapy 最后会去重
    # follow=True 所有的页面数据。
    '''

    def parse_item(self, response):
        # i = {}
        #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
        #i['name'] = response.xpath('//div[@id="name"]').extract()
        #i['description'] = response.xpath('//div[@id="description"]').extract()
        # return i
        '''
        print(response)打印的是提取器提取到的链接,但是可以直接response.xpath解析链接指向的页面!
        :param response:
        :return:
        '''
        title=response.xpath('/html/body/div[1]/div[1]/div[2]/div[1]/div/div/h1/a/text()').extract_first()
        print(title)

在这里插入图片描述
在这里插入图片描述

【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程 本文适合刚接触python爬虫的小白,讲解如何使用 Scrapy 框架爬取 豆瓣电影 TOP250 数据。通过环境配置、项目创建和编写爬虫的步骤,帮助你快速上手并掌握 Scrapy 的基本使用方法。 阅读详情

相关推荐

用Scrapy框架爬取豆瓣电影,构建豆瓣电影预测评分模型

文章目录前言一、Scrapy爬虫爬取豆瓣电影1. Scrapy框架介绍(1) Scrapy框架构造:(2) 数据流(3) 项目结构2. 创建爬虫爬取豆瓣(1)创建项目(2) 创建Item(3) 解析Response和Request(4) Item Pipeline连接mysql数据库存储数据二、构建豆瓣电影评分预测模型1.引入库2.读入数据总结 前言 这段时间对爬虫进行了一定的学习,爬虫除了requests和BeautifulSoup还有很多框架,使用requests等库写爬虫如果爬取量不是太大,速度要求

bibibibiboi的博客 4729

scrapy实现二级页面爬取(以小说为例)

1.scrapy图解 2.创建项目 scrapy startproject 项目名 创建后的目录 3.编写字段 在items.py中编写需要的字段,这里就写小说的章节和内容 class XiaoshuoItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() ...

GGBond的博客 4505

【爬虫】Scrapy初次尝试 入门详细教程(爬取豆瓣top250电影信息)

使用scrapy爬虫框架爬取豆瓣电影Top 250的电影信息(序号、电影名、介绍、星级、评论数、描述)。包括:环境的搭建、item编写、xpath定位、spider编写、数据保存等部分。

See_Star的博客 7579

电影资源格式说明

根据命名,可以知道资源的来源,从而判断资源画质的好坏。1.CAM(枪版)——珍爱生命,远离枪版 CAM通常是用数码摄像机从电影院盗录。有时会使用小三角架,但大多数时候不可能使用,所以摄像机会抖动。因此我们看到画面通常偏暗、人物常常会失真,视频画面时常会出现倾斜、抖动。 由于声音是电影院现场录制,所以经常会录到观众的笑声等杂音。因为这些因素,图象、声音质量通常都很差。举例说明:Journey.To....

@忠祥 的博客 11万+

python爬虫教程: Python利用Scrapy框架爬取豆瓣电影示例

本文实例讲述了Python利用Scrapy框架爬取豆瓣电影。分享给大家供大家参考,具体如下: 1、概念 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 通过Python包管理工具可以很便捷地对scrapy进行安装,如果在安装中报错提示缺少依赖的包,那就通过pip安装所缺的包 pip install scrapy...

python爬虫教程 6658

使用scrapy框架爬取豆瓣电影top250信息

看了几篇博客,跟着其他大佬的讲解学习了一下使用scrapy框架爬取网站信息,然后自己趁热打铁一波爬取一下豆瓣电影top250运行环境 1. win7-64bit 2. python 3.5.3 可以看到该页面结构如下图 而要爬取的部分为 通过查看源代码,需要解析的代码就是这么一部分<li> <div class="item"> <div class="pic"> <em

ljm_9615的博客 9036

电影的分级制度介绍

电影分级制度指把片厂的产品按其内容划分成若干级,给每一级规定好允许面对的群众群,电影分级制度的出现主要是为了青少年发展教育,以便区分其等级和适宜度。起到指导看片的作用。 电影分级是一个标准,也是一个参考值。根据影片之内容来规定和划分适合观赏的年龄段。电影分级本质是为观众服务。电影分级制度并不是100%的精确,它的初衷是为了保护儿童和青少年的。但是有时候,在商业利益面前,电影分级制度无能为力。很多片

Catullus的博客 22万+

python爬虫——用Scrapy框架爬取阳光电影的所有电影

python爬虫——用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'ygdy8' allowed_domains = ['ygdy8.net'] start_urls = ['http://www.ygdy8.net/index.html'] 4....

心之所向的博客 3249

Scrapy爬取多级页面数据

使用scrapy从多级页面中提取数据

manfanying的博客 3056

爬虫实战(一)利用scrapy爬取豆瓣华语电影

在学习爬虫之前,翻过知乎上的一个回答:利用爬虫技术能做到哪些很酷很有趣很有用的事情?,这大概是我学习爬虫最初的动力。而现在踏过小白阶段后,便开始也想做这样的事情,结合数据分析或是其他的,做一些有趣的东西。 那从简单的开始,第一个爬虫项目是爬取豆瓣华语电影的数据,后面将利用这部分数据进行分析。 1. 爬取思路 在观察了豆瓣每个影片的链接地址后,写下了主要思路: 在豆瓣电影的选片页面,筛选所有华语(...

SY的博客 6076

利用Scrapy爬取1905电影网

本文将从以下几个方面讲解Scrapy爬虫的基本操作 Scrapy爬虫介绍 Scrapy安装 Scrapy实例——爬取1905电影网 相关资料 Scrapy 爬虫介绍Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据

wds2006sdo的专栏 14万+

scrapy笔记2—实现多级页面信息分别爬取

yield scrapy.Request(item['url'], meta={'item': item}, callback=self.detail_parse) Scrapy 用scrapy.Request发起请求可以带上 meta={'item': item} 把之前已收集到的信息传递到新请求里,在新请求里用 item = response.meta('item') 接受过来,在 item ...

背离赤道、逆光而行 5075

scrapy简单的多层页面爬取程序

恩..简单的scrapy简单的多层页面爬取程序,适用于初学者想尝试多层页面爬取又没有代码看的人,明天大概会写一篇博客分享大概的流程吧,到时候会有部分关键源码

利用scrapy爬取豆瓣top250

##前言(目的) 本文为scrapy爬虫的入门文章,作者尽量将自己刚开始学习所遇到的问题都还原出来,过程尽量写得详细详细再详细。希望通过这篇文章来记录自己刚开始学习爬虫所踩过的一些坑,同时记录下自己处理和解决问题的思路,便于和大家分享交流,同时也希望读者能仅仅只通过这一篇文章,就搭建出一个 demo 可以立马上手跑起来。 在本篇文章中,作者先简单的介绍了爬虫的基本概念和 scrapy 爬虫框架,接着以豆瓣电影TOP250为例,详细讲述 scrapy 的实际运用。由于作者水平有限,若有错误或不恰当之处,还望不

一万年太久,只争朝夕 1万+

Scrapy爬取多级网页内容源代码加实现.txt

多级网页结构爬取99健康网的信息,用了多种网页反爬取,获取疾病信息。

整理笔记——二极管

二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件,二极管的核心是PN结。加在二极管两端的电压和通关的电流被成为,二极管的伏安特性曲线​​​二极管的正向特性:起初正向电压较小时,正向电流几乎没有,称之为死区,此时二极管处于截止状态。当电压差超过截止电压(0.5V或者0.7V),电流随着电压上升,开始增加缓慢,随后急剧增大,二极管的电阻变小进入导通状态,此时电压变化较小。二极管的反向特性:起初反向电流很小,不随电压二变化,此时成为反向饱和电流;当方向电压达到二极管的反向击穿电压。

#include 811

Python开发从入门到精通:网络爬虫高级应用与Scrapy框架

本文介绍了Python网络爬虫的高级应用与Scrapy框架的核心内容。首先概述了网络爬虫的基本概念和工作流程,然后重点讲解了Scrapy框架的安装、项目创建和爬虫编写方法。针对动态网页爬取,介绍了Selenium的使用及其与Scrapy的结合。在反爬虫策略方面,详细说明了代理IP、User-Agent旋转和Cookies池等技术的实现。最后,通过Scrapy-Redis实现了分布式爬虫,并以豆瓣电影Top250为案例进行了实战演示。文章涵盖了网络爬虫开发的核心技术要点,包括框架使用、反反爬措施和分布式处理等

编程世界如山海,探索不止。 2万+

【算法设计与分析】期末复习题(超详细)

刚刚整理了一下电脑的文件,发现了这份上学期的算法设计与分析期末复习题,有需要的文后自取。

a1234567822的博客 6612
上一篇: scrapy-日志种类
下一篇: 爬虫——分布式爬虫爬取糗事百科所有页面的趣图链接
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值