【问题标题】:Scraping recursive page data with Scrapy使用 Scrapy 抓取递归页面数据
【发布时间】:2014-02-13 12:55:52
【问题描述】:

我正在尝试使用 python 和 Scrapy 从Subway UK Restaurant Finder 中抓取商店位置数据。我已经设法抓取了各个页面,但我想将其设置为在链接末尾运行一个包含 1000 个递归 id 的列表。任何帮助将不胜感激。

免责声明:我不知道自己在做什么

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from subway.items import SubwayFinder

class MySpider(BaseSpider):
name = "subway"
allowed_domains = ["http://www.subway.co.uk/"]
start_urls = ["http://www.subway.co.uk/business/storefinder/store-detail.aspx?id=453056039"]

def parse(self, response):
  hxs = HtmlXPathSelector(response)
  titles = hxs.select("//div[@class='mid']")
  items = []
  for titles in titles:
      item = SubwayFinder()
      item ["title"] = titles.select("p/span/text()").extract()
      items.append(item)
  return items

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    如您的代码所示,蜘蛛函数可以​​返回(或产生)项目,但它也可以返回/产生Requests,scrapy 会将项目发送到配置的管道并调用这些请求以进一步抓取,看看请求字段,回调函数将与响应一起调用。

    为了抓取多个商店位置,您必须查找包含所有商店链接的 url 模式或索引页面。

    例如:

    http://www.subway.co.uk/business/storefinder/store-detail.aspx?id=453056039
    

    看起来不太适合循环遍历所有商店 ID,调用 453056039 http 请求可能不是一个好主意。

    我在网站上找不到索引页面,最接近的可能是将 start_urls 设置为 'www.subway.co.uk/business/storefinder/search.aspx?pc=' + range(1,10) 或其他一些将被证明更好的数字,并进一步抓取每个页面上出现的链接,也请注意,幸运的是,scrapy 不会两次抓取页面(除非被告知),因此出现在多个索引页面中的商店详细信息页面不是问题

    【讨论】:

      【解决方案2】:

      你可以用CrawlSpider代替BaseSpider

      查看此link 了解如何使用爬虫。

      您需要为 scrapy 定义 rules 才能抓取网页。这些规则将定义您希望 scrapy 允许抓取的网站和链接。

      您可以查看此example 以获取有关结构的示例爬虫

      顺便说一句,考虑更改函数名称,来自文档:

      Warning
      
      When writing crawl spider rules, avoid using parse as callback, since the CrawlSpider uses the parse method itself to implement its logic. So if you override the parse method, the crawl spider will no longer work.
      

      【讨论】:

        猜你喜欢
        • 2014-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多