我99%肯定我的hxs.select在这个网站上发生了什么,我无法从这个内部网网站中提取任何内容。当我运行这个时,我得到没有错误,没有任何标题或链接填充。有什么帮助吗?
def parse(self, response):
self.log("\n\n\n We got data! \n\n\n")
hxs = HtmlXPathSelector(response)
sites = hxs.select('//div[@class=\'footer\']')
items = []
for site in sites:
item = CarrierItem()
item['title'] = site.select('.//a/text()').extract()
item['link'] = site.select('.//a/@href').extract()
items.append(item)
return items
有没有办法可以调试这个?我也尝试做一个shell网址。当我在我的cmd中输入视图(响应)时,我得到一个“真实”文本文件,而不是我的网络浏览器。
>>> response.url
'https://qvpweb01.ciq.labs.att.com:8080/dis/login.jsp'
>>> hxs.select('//div')
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'select'
>>> view(response)
True
>>> hxs.select('//body')
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'select'
>>>
答案 0 :(得分:1)
Scrapy shell确实是一个很好的工具。如果您的文档有XML样式表,那么它可能是一个XML文档。因此,您可以使用sc xxs
而非hxs
的scrapy shell,就像此Scrapy文档示例中有关删除命名空间一样:
http://doc.scrapy.org/en/latest/topics/selectors.html#removing-namespaces
当这不起作用时,我倾向于回到纯lxml.etree并转储整个文档的元素:
import lxml.etree
import lxml.html
class myspider(BaseSpider):
...
def parse(self, response):
self.log("\n\n\n We got data! \n\n\n")
root = lxml.etree.fromstring(response.body).getroot()
# or for broken XML docs:
# root = lxml.etree.fromstring(response.body, parser = lxml.etree.XMLParser(recover=True)).getroot()
# or for HTML:
# root = lxml.etree.fromstring(response.body, parser=lxml.html.HTMLParser()).getroot()
# and then lookup what are the actual elements I can select
print list(root.iter()) # this could be very big, but at least you all what's inside, the element tags and namespaces
答案 1 :(得分:0)
您可以从命令行使用pdb并在文件中添加断点。但它可能涉及一些步骤。
(对于Windows调试,它可能略有不同)
找到您的scrapy
可执行文件:
$ whereis scrapy
/usr/local/bin/scrapy
将其称为python脚本并启动pdb
$ python -m pdb /usr/local/bin/scrapy crawl quotes
进入调试器shell后,打开另一个shell实例并找到蜘蛛脚本的路径(驻留在蜘蛛项目中)
$ realpath path/to/your/spider.py
/absolute/spider/file/path.py
这将输出绝对路径。将其复制到剪贴板。
在pdb shell中输入:
b /absolute/spider/file/path.py:line_number
...在调试该文件时,行号是要中断的所需点。
c
... 现在去做一些PythonFu:)