【问题标题】:Scrapy recursively scraping craigslistScrapy 递归抓取 craigslist
【发布时间】:2013-11-26 02:07:13
【问题描述】:

我正在使用 scrapy 来废弃 craigslist 并获取所有链接,转到该链接,存储每个页面的描述并通过电子邮件发送回复。现在我已经编写了一个scrapy 脚本,它可以浏览craigslist/sof.com 并获取所有职位和网址。我想进入每个 url 并保存每个工作的电子邮件和描述。这是我的代码:

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from craigslist.items import CraigslistItem

class MySpider(BaseSpider):
    name = "craig"
    allowed_domains = ["craigslist.org"]
    start_urls = ["http://sfbay.craigslist.org/npo/"]
    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        titles = hxs.select("//span[@class='pl']")
        for titles in titles:
                title = titles.select("a/text()").extract()
                link = titles.select("a/@href").extract()
                desc = titles.select("a/replylink").extract
                print link, title

任何想法如何做到这一点?

【问题讨论】:

  • 究竟该怎么做?您的代码有问题还是需要更多代码?
  • 我需要更多代码。这段代码很好。我想通过链接进行递归,然后废弃这些链接的数据。

标签: python scrapy scrapyd


【解决方案1】:

scrapy 函数应该产生(或返回)Item/sRequest/s

根据配置,返回的Item将是pipelined,下一个爬虫步骤是通过返回一个Request并在回调字段中引用该函数来确定

来自scrapy文档:

def parse_page1(self, response):
    return Request("http://www.example.com/some_page.html",
                      callback=self.parse_page2)

def parse_page2(self, response):
    # this would log http://www.example.com/some_page.html
    self.log("Visited %s" % response.url)

【讨论】:

    【解决方案2】:

    根据他们的政策,抓取 craigslist 是非法的:

    禁止使用机器人、蜘蛛、脚本、爬虫、爬虫等

    来源:https://www.craigslist.org/about/terms.of.use

    现在他们的 API 是另一个问题,但它只会每小时更新一次(因此有 1 小时的延迟时间)。

    【讨论】:

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