如何使用python在scrapy上使用相同的域抓取2个网页?

问题描述 投票:0回答:1

嗨,大家好我在抓数据方面很新,我尝试过基本的。但我的问题是我有2个网页,我需要抓住相同的域名

我的逻辑是,第一页www.sample.com/view-all.html *这个页面打开所有项目列表,我需要得到每个项目的所有href attr。

第二页www.sample.com/productpage.52689.html

*这是来自第一页的链接,因此52689需要根据第一页提供的链接动态更改。

我需要在第二页上获取标题,描述等所有数据。

我在想的是循环,但它不适合我。我在谷歌搜索,但没有人像我一样有问题。请帮我

import scrapy

class SalesItemSpider(scrapy.Spider):
    name = 'sales_item'
    allowed_domains = ['www.sample.com']
    start_urls = ['www.sample.com/view-all.html', 'www.sample.com/productpage.00001.html']

    def parse(self, response):
        for product_item in response.css('li.product-item'):
            item = {
                'URL': product_item.css('a::attr(href)').extract_first(),
            }
            yield item`
python web-scraping scrapy
1个回答
1
投票

parse内你可以用网址和功能名称yield Request()来刮掉这个不同功能的网址

def parse(self, response):

    for product_item in response.css('li.product-item'):
        url = product_item.css('a::attr(href)').extract_first() 

        # it will send `www.sample.com/productpage.52689.html` to `parse_subpage` 
        yield scrapy.Request(url=url, callback=self.parse_subpage)


def parse_subpage(self, response):
    # here you parse from www.sample.com/productpage.52689.html 

    item = {
        'title': ..., 
        'description': ...
    }

    yield item

RequestScrapy documentation寻找its tutorial


还有

response.follow(url, callback=self.parse_subpage)

这会自动将www.sample.com添加到网址,这样你就不必自己动手了

Request(url = "www.sample.com/" + url, callback=self.parse_subpage)

A shortcut for creating Requests


如果你有兴趣刮,那么你应该从第一页到最后一页阅读docs.scrapy.org

© www.soinside.com 2019 - 2024. All rights reserved.