【问题标题】:Scraping with scrapy in paginated links using start url not working使用起始网址在分页链接中使用scrapy刮擦不起作用
【发布时间】:2018-08-14 01:09:52
【问题描述】:

我试图废弃一个有分页链接的网站,所以我这样做了

import scrapy

class SummymartSpider(scrapy.Spider):
    name = 'dummymart'
    allowed_domains = ['www.dummrmart.com/product']
    start_urls = ['https://www.dummymart.net/product/auto-parts--118?page%s'% page for page in range(1,20)]

成功了!!使用单个 url 它可以工作,但是当我尝试这样做时:

  import scrapy
    class DummymartSpider(scrapy.Spider):
        name = 'dummymart'
        allowed_domains = ['www.dummymart.com/product']
        start_urls = ['https://www.dummymart.net/product/auto-parts--118?page%s',
        'https://www.dummymart.net/product/accessories-tools--112?id=1316264860?page%s'% page for page in range(1,20)]

它不起作用,我如何实现相同的逻辑,但对于多个 URL?谢谢

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    一种方法是使用scrapy.Spiderstart_requests() 方法,而不是使用start_urls 属性。 You can see more here

    import scrapy
    
    class DummymartSpider(scrapy.Spider):
        name = 'dummymart'
        allowed_domains = ['dummymart.com']
    
        def start_requests(self):
            for page in range(1,20):
                yield scrapy.Request(
                    url='https://www.dummymart.net/product/auto-parts--118?page%s' % page,
                    callback=self.parse,
                )
                yield scrapy.Request(
                    url='https://www.dummymart.net/product/accessories-tools--112?id=1316264860?page%s' % page,
                    callback=self.parse,
                )
    

    如果你想继续使用start_urls属性,你可以试试这样的(我没有测试过):

    start_urls = ['https://www.dummymart.net/product/auto-parts--118?page%s' % page for page in range(1,20)] + ['https://www.dummymart.net/product/accessories-tools--112?id=1316264860?page%s'% page for page in range(1,20)]

    另请注意,在allowed_domains 属性中您只需要指定域。 See here.

    【讨论】:

    • 后者有效。谢谢。我会检查第一个并更新你
    • 如果范围未知,因为每个链接都不一样怎么办?
    • 我在 csv 文件中也有这些链接列表,如何包含它,因为手动输入需要很长时间,谢谢
    • 如果范围未知,可以从每个url的第一页开始,然后通过解析当前页的下一页url来迭代槽页。例如:next_url = response.css('#next_url::attr(href)').extract_first() return scrapy.Request(url=next_url, callback=self.parse)
    • 如果要从csv文件中解析url,可以使用我第一个回答中的start_requests()方法,读取csv文件like so
    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多