Scrapy 蜘蛛不会在启动 url 上爬行

Scrapy spider will not crawl on start urls

我是一个全新的好斗的人,并且已经完成了本教程,并且正在尝试弄清楚如何实施我到目前为止所学的知识来完成看似基本的任务。到目前为止,我知之甚少 python 并将其用作学习经验,所以如果我问一个简单的问题,我深表歉意。

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

现在蜘蛛没有在我输入的任何网页上爬行。当我 运行 它时,代码中没有列出任何错误,它只是说明已抓取 0 个页面。我不太清楚我做错了什么。我确定开始 url 没问题,因为我已经检查过了。我是否需要特定类型的蜘蛛来完成我想做的事情?

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

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

首先,我不明白你在 for 循环中做了什么,因为如果你有一个 select 或者你没有得到整个 HTML 再次到 select 它...

然而,有趣的部分是浏览器表示 table 与使用 Scrapy 下载的方式不同。如果您查看 parse 方法中的响应,您会发现第一个 table 中没有 tbody 元素。这就是为什么你的 selection 没有 return 任何东西。

因此,要获得第一个序列号(因为它在您的 XPath 中),请将您的解析函数更改为:

def parse(self, response):
    item = SonrisdataaccessItem()
    item['serial'] = response.xpath('/html/body/table[1]/tr[2]/td[1]/text()').extract()[0]
    yield item

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