Scrapy spider不会在启动URL上爬行

时间:2015-07-28 02:43:14

标签: web-scraping scrapy screen-scraping

我是斗志全新的,并且已经完成了整个教程,并试图找出如何实现我迄今为止学到的东西来完成一个看似基本的任务。到目前为止我对python知之甚少并且正在使用它作为学习经验,所以如果我问一个简单的问题,我道歉。

我对此计划的目标是遵循此链接http://ucmwww.dnr.state.la.us/ucmsearch/FindDocuments.aspx?idx=xwellserialnumber&val=971683并将井序号提取到csv文件。最终我想在几千个不同的井文件上运行这个蜘蛛并检索特定数据。但是,我首先从基础开始。

现在蜘蛛不会在我输入的任何网页上抓取。运行时代码中没有列出错误,只是说明了0页被抓取。我无法弄清楚我做错了什么。我很肯定开始网址是好的,因为我已经检查过了。我是否需要特定类型的蜘蛛来完成我想要做的事情?

import scrapy
from scrapy import Spider
from scrapy.selector import Selector

class Sonrisdataaccess(Spider):
  name = "serial"
  allowed_domains = ["sonris.com"]
  start_urls = [
      "http://sonlite.dnr.state.la.us/sundown/cart_prod/cart_con_wellinfo2?p_WSN=972498"]


 def parse(self, response):
    questions = Selector(response).xpath('/html/body/table[1]/tbody/tr[2]/td[1]')

    for question in questions:
        item = SonrisdataaccessItem()
        item['serial'] = question.xpath ('/html/body/table[1]/tbody/tr[2]/td[1]').extract()[0]
        yield item

感谢您的帮助,我非常感谢!

1 个答案:

答案 0 :(得分:0)

首先,我不明白你在for循环中做了什么,因为如果你有一个选择器,你不会再次获得整个HTML来选择它......

然而,有趣的是,浏览器表示与使用Scrapy下载的表格不同。如果您在User Types - Classes方法中查看回复,您会发现第一个parse中没有tbody个元素。这就是为什么您的选择不会返回任何内容。

因此,要获取第一个序列号(就像在XPath中一样),请将解析函数更改为:

table

对于以后的更改,您可能必须更改XPath表达式以获取更多数据。