scrapy:电影天堂案例

嵌套数据封装成一个item(一个item包含多级页面的数据):每条记录的名称+点进去之后第二页中的图片

image-20230525150658615

image-20230525150736645


1. 创建爬虫项目

scrapy startproject scrapy_movie_5

image-20230525151228816

2. 创建爬虫文件

scrapy genspider mv https://www.ygdy8.net/html/gndy/china/index.html

image-20230525151623723

3. 实现爬虫

image-20230525153330779

image-20230525153304662

image-20230525153448661

image-20230525160626025

image-20230525160651044

image-20230525160707319

image-20230525160725909

import scrapy
from scrapy_movie_5.items import ScrapyMovie5Item


class MvSpider(scrapy.Spider):
    name = "mv"
    # allowed_domains = ["https://www.ygdy8.net/html/gndy/china/index.html"]
    allowed_domains = ['www.dytt8.net']
    start_urls = ['https://www.dytt8.net/html/gndy/china/index.html']

    def parse(self, response):
        # 第一页的名字和第二页的图片
        a_list = response.xpath('//div[@class="co_content8"]//td[2]//a[2]')
        for a in a_list:
            # 获取第一页的name 和 要点击的链接
            name = a.xpath('./text()').extract_first()
            href = a.xpath('./@href').extract_first()
            # 第二页的地址
            url = 'https://www.dytt8.net' + href  # 注意要修改allowed_domains,因为需要访问的第二页不再原范围内
            # 对第二页的链接发起访问
            yield scrapy.Request(url=url, callback=self.parse_second, meta={'name': name})
            # 注意当涉及多级页面时,要用meta来存参数

    def parse_second(self, response):
        # 注意 如果拿不到数据的情况下  一定检查你的xpath语法是否正确
        src = response.xpath('//div[@id="Zoom"]//img/@src').extract_first()
        # 接受到请求的那个meta参数的值
        name = response.meta['name']
        movie = ScrapyMovie5Item(src=src, name=name)
        yield movie

scrapy crawl mv

image-20230525161253244

posted @   yub4by  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示