【问题标题】:How to scrape the links hidden in the dropdown menu using scrapy?如何使用scrapy刮掉隐藏在下拉菜单中的链接?
【发布时间】:2019-05-15 00:42:40
【问题描述】:

我将从网页中抓取 NFL 深度图表,例如https://www.ourlads.com/nfldepthcharts/archive/220/BUF 。现在我想获取此类页面的所有链接,但下拉菜单“存档日期”的源代码不包含任何链接:

    <option value="">-- Archive Dates --</option>
    <option value="220">05/01/2019</option>
    <option value="219">04/01/2019</option>
    <option value="218">03/01/2019</option>
    <option value="217">02/01/2019</option>
    <option value="216">01/01/2019</option>
    <option value="215">12/01/2018</option>
    <option value="214">11/01/2018</option>
    <option value="213">10/01/2018</option>
    <option value="212">09/01/2018</option>
    <option value="211">08/01/2018</option>

我读了一篇 Web scrape get drop-down menu data python 的帖子,我认为这很有帮助,因为他指出该网页使用 JavaScript。

但该答案使用硒。我想知道我是否可以使用scrapy 或beautifulsoup 来解决这个问题。

以下是我的爬虫的结构。

class depth_chart_archive_spider(scrapy.Spider):
    name = "depth_chart_archive"
    start_urls = ('https://www.ourlads.com/nfldepthcharts/',)

    def parse(self, response):
        dchome = BeautifulSoup(response.body, 'html.parser')

        # get the links somehow

        for link in links:
            yield scrapy.Request(link, callback = self.parse_team)

    def parse_team(self, response):
        # parse the page

【问题讨论】:

    标签: web-scraping scrapy


    【解决方案1】:

    您可以使用每个 option 标记上的 value 参数来构建 URL。

    例如,引用 05/01/2019 的菜单在 option 标签中有 value=220

    <option value="220">05/01/2019</option>
    

    点击此菜单时打开的网址是:

    https://www.ourlads.com/nfldepthcharts/archive/220/BUF
    

    因此它遵循一个模式,您可以使用以下方式请求所有项目:

    site_url = 'https://www.ourlads.com/nfldepthcharts/archive/{code}/BUF'
    
    for code in response.xpath('//option/@value').re(r'\d+'):
        yield Request(site_url.format(code=code))
    

    正则表达式只是为了避免请求第一项&lt;option value=""&gt;-- Archive Dates --&lt;/option&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多