【问题标题】:Trying to crawl all links of a webpage with scrapy. But I cannot output the links on a page试图用scrapy抓取网页的所有链接。但我无法输出页面上的链接
【发布时间】:2012-12-06 09:44:01
【问题描述】:

我的第一个问题:)

我试图在我的学校网站上抓取所有可能的网页。但我无法将链接放入文本文件。我有正确的权限,所以这不是问题。

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from scrapy.spider import BaseSpider

class hsleidenSpider(CrawlSpider):
        name = "hsleiden1"
        allowed_domains = ["hsleiden.nl"]
        start_urls = ["http://hsleiden.nl"]

        # allow=() is used to match all links
        rules = [
        Rule(SgmlLinkExtractor(allow=()), follow=True),
        Rule(SgmlLinkExtractor(allow=()), callback='parse_item')
        ]

        def parse_item(self, response):
                x = HtmlXPathSelector(response)

                filename = "hsleiden-output.txt"
                open(filename, 'ab').write(response.url)

所以我只在 hsleiden.nl 页面上进行扫描。我想将 response.url 放入文本文件 hsleiden-output.txt。

有什么方法可以做到这一点吗?

【问题讨论】:

  • 请具体说明您的问题。你期望会发生什么?发生了什么?
  • 如果我想借用你的代码,我该怎么称呼它?

标签: python scrapy web-crawler


【解决方案1】:

参考CrawlSpider 的文档,如果多个规则匹配同一个链接,则只会使用第一个。

因此,由于重定向,使用第一条规则会导致看似无限循环。由于第二条规则被忽略,任何匹配的链接都不会传递给 parse_item 回调,这意味着没有输出文件。

需要进行一些调查来解决重定向问题(并修改第一条规则,使其不与第二条冲突),但将其完全注释掉会产生如下链接的输出文件:

http://www.hsleiden.nl/activiteitenkalenderhttp://www.hsleiden.nlhttp://www.hsleiden.nl/vind-je-studie/proefstuderenhttp://www.hsleiden.nl/studiumgenerale

它们都在一行中合并在一起,因此您可能希望在每次写入输出文件时添加换行符或分隔符。

【讨论】:

  • 谢谢队友,为我工作。此外,您在输出端的解决方案 '\n' 也已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2021-11-25
  • 1970-01-01
  • 2021-05-11
  • 2020-08-08
  • 1970-01-01
相关资源
最近更新 更多