【问题标题】:Scrapy forum crawler starting but not returning any scraped dataScrapy 论坛爬虫启动但不返回任何抓取的数据
【发布时间】:2013-03-13 12:13:27
【问题描述】:

这是我的代码,有人可以帮忙吗,由于某种原因蜘蛛运行但实际上并没有抓取论坛线程。我正在尝试在我的开始网址中提取特定论坛的论坛主题中的所有文本。

from scrapy.spider import BaseSpider

from scrapy.contrib.spiders import CrawlSpider, Rule

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor

from scrapy.selector import HtmlXPathSelector

from xbox.items import xboxItem

from scrapy.item import Item
from scrapy.conf import settings


class xboxSpider(CrawlSpider):
    name = "xbox"
    allowed_domains = ["forums.xbox.com"]
    start_urls= [
    "http://forums.xbox.com/xbox_forums/xbox_360_games/e_k/gearsofwar3/default.aspx",
    ]
    rules= [
        Rule(SgmlLinkExtractor(allow=['/t/\d+']),callback='parse_thread'),  
        Rule(SgmlLinkExtractor(allow=('/t/new\?new_start=\d+',)))
            ]


    def parse_thread(self, response):
        hxs=HtmlXPathSelector(response)

        item=xboxItem()
        item['content']=hxs.selec("//div[@class='post-content user-defined-markup']/p/text()").extract()
        item['date']=hxs.select("//span[@class='value']/text()").extract()
        return item

日志输出:

2013-03-13 11:22:18-0400 [scrapy] DEBUG: Enabled item pipelines: 
2013-03-13 11:22:18-0400 [xbox] INFO: Spider opened 
2013-03-13 11:22:18-0400 [xbox] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2013-03-13 11:22:18-0400 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 
2013-03-13 11:22:18-0400 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080
2013-03-13 11:22:20-0400 [xbox] DEBUG: Crawled (200) <GET forums.xbox.com/xbox_forums/xbox_360_games/e_k/gearsofwar3/f/…; (referer: None) 
2013-03-13 11:22:20-0400 [xbox] DEBUG: Filtered offsite request to 'forums.xbox.com': <GET forums.xbox.com/xbox_forums/xbox_360_games/e_k/gearsofwar3/f/…; 
2013-03-13 11:22:20-0400 [xbox] INFO: Closing spider (finished) 
2013-03-13 11:22:20-0400 [xbox] INFO: Dumping spider stats

【问题讨论】:

  • 向我们展示您的爬虫日志..
  • 2013-03-13 11:22:18-0400 [scrapy] 调试:启用项目管道:2013-03-13 11:22:18-0400 [xbox] 信息:Spider 于 2013 年打开- 03-13 11:22:18-0400 [xbox] 信息:爬取 0 页(以 0 页/分钟),抓取 0 项(以 0 项/分钟)2013-03-13 11:22:18-0400 [scrapy ] 调试:Telnet 控制台监听 0.0.0.0:6023 2013-03-13 11:22:18-0400 [scrapy] 调试:Web 服务监听 0.0.0.0:6080
  • 2013-03-13 11:22:20-0400 [xbox] 调试:已爬网 (200) forums.xbox.com/xbox_forums/xbox_360_games/e_k/gearsofwar3/f/…>(引用者:无)2013-03-13 11:22:20 -0400 [xbox] 调试:过滤到“forums.xbox.com”的异地请求:forums.xbox.com/xbox_forums/xbox_360_games/e_k/gearsofwar3/f/…> 2013-03-13 11:22:20-0400 [xbox] 信息:关闭蜘蛛(已完成)2013-03 -13 11:22:20-0400 [xbox] 信息:倾销蜘蛛统计数据

标签: scrapy forum web-crawler


【解决方案1】:

作为第一个调整,您需要通过添加“.”来修改您的第一条规则。在正则表达式的开头,如下所示。我还将开始 url 更改为论坛的实际首页。

start_urls= [
"http://forums.xbox.com/xbox_forums/xbox_360_games/e_k/gearsofwar3/f/310.aspx",
]
rules = (
    Rule(SgmlLinkExtractor(allow=('./t/\d+')), callback="parse_thread", follow=True),
    Rule(SgmlLinkExtractor(allow=('./310.aspx?PageIndex=\d+')), ),
    )

我已经更新了规则,蜘蛛现在可以抓取线程中的所有页面。

编辑:我发现了一个可能导致问题的错字,并且我已经修复了 xpath 的日期。

 item['content']=hxs.selec("//div[@class='post-content user-defined-markup']/p/text()").extract()
 item['date']=hxs.select("(//div[@class='post-author'])[1]//a[@class='internal-link view-post']/text()").extract()

上面的行是“hxs.select”,应该是“hxs.select”。我改变了它,现在可以看到内容被刮掉了。通过反复试验(我对 xpaths 有点垃圾),我设法获得了第一篇文章的日期(即创建线程的日期),所以现在应该一切正常。

【讨论】:

  • 我没有检查那么远。如果你没有得到任何刮掉的输出,那么这表明你的 xpath 是错误的。您可以通过调用“scrapy shell xbox”来测试它们,然后通过键入“hxs.select(EXAMPLE_XPATH)”来尝试不同的 xpath。
  • 是的,我认为它是 xpath 的定义,我昨天运行了 shell,但我将深入挖掘..谢谢..这个论坛有一些严重的 html 层:/ 但结果是值得:)
  • 修复了日期的 xpath(请参阅上面我编辑的答案)。换一种说法,当它出来的时候你会得到审判吗? :)
  • 是的,我得到了所有的日期,论坛文本的 xpath 有点棘手..xpath 太痛苦了.. 是的,我正在做情绪分析研究 :)
  • 似乎也是我的 CrawlSpider 的问题,一旦我使用 Base dates are all set
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2023-04-04
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多