【问题标题】:Python scrapy Crawling the links not scrapingPython scrapy 抓取链接不抓取
【发布时间】:2017-04-26 03:39:07
【问题描述】:

我是 Scrapy 框架的新手,正在尝试学习网络抓取 我有一个包含网站页面链接的 txt 文件,我正在制作这些链接的列表并将它们存储在 start_urls 但解析功能不起作用并且它没有抓取任何东西

这里是代码

try:
    import scrapy
except ImportError:
    print "\nERROR IMPORTING THE NESSASARY LIBRARIES\n"

#File with all the links
crimefile = open('links.txt', 'r')
#making a list with all the links
yourResult = [line for line in crimefile.readlines()]

class SpiderMan(scrapy.Spider):
    name = 'man spider'

    #making start_urls equal to that list
    start_urls = yourResult

    def parse(self, response):
        SET_SELECTOR = '.c411Listing.jsResultsList'
        for man in response.css(SET_SELECTOR):
            name = '.c411ListedName a ::text'
            address = '.adr ::text'
            phone = '.c411Phone ::text'
            yield { 

                    'NAME': man.css(name).extract_first(),
                    'ADDRESS': man.css(address).extract_first(),
                    'PHONE': man.css(phone).extract_first(),
                    }

ad 是输出,由于某种原因解析功能不起作用,但抓取正在抓取每个链接

我做错了什么?在这个简单的代码中?

【问题讨论】:

  • 在scrapy shell中我得到了结果,你试过调试吗?你是怎么跑scrapy的?。

标签: python web-scraping scrapy scrapy-spider


【解决方案1】:

问题是您的网址以“%0D%0A”结尾。如果您将 scrapy 日志中的其中一个 URL 输入浏览器,您将看到一个屏幕说明:

“输入的邮政编码格式错误。”

“%0D%0A”是您文件中的 URL 换行符,这些 URL 在加载文件并将其拆分为行时会以某种方式保留。删除它们,你会没事的。

简单修复 - 添加对 strip() 的调用:

yourResult = [line.strip() for line in crimefile.readlines()]

【讨论】:

  • 我有一个巨大的列表,for 循环没有对所有元素进行条带化
  • 如果 strip() 不适用于所有元素,则可能还有其他字符使 URL 无效。检查引号、奇怪的 unicode 字符、unicode 空格。这些也需要删除。如果这没有帮助,请在此处发布一些不起作用的 url 示例(从日志中复制它们)。
  • 谢谢,但我已经检查过所有的网址都是免费的特殊字符,但由于某种原因,它一次只能处理 1000 个链接,因为其他链接 scrapy 没有访问。所以我做了一个快速修复,我创建了一个循环,一次从文本文件中获取 1000 个链接,并使用了你更正的代码。我真的很想知道是什么导致了这种行为,可能是scrapy的一些限制。
  • Scrapy 本身没有这样的限制。只要有足够的内存,它甚至可以处理数百万个起始 url。所以问题一定出在其他地方。 scrapy 在日志中没有提到这些 url 吗?
猜你喜欢
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多