正确地使用scrapy刮擦特定网站时遇到问题

时间:2016-12-22 06:37:33

标签: python-2.7 web-scraping scrapy

我查看了Scrapy的教程,我能够理解如何废弃教程中包含的网站。但是我对一些比较复杂的网站有点麻烦(至少对我而言)。

我正试图从这个网页上抓取内幕交易的行和列:

http://finviz.com/insidertrading.ashx

我正在使用带有scrapy的命令提示符命令来测试我是否能够获取必要的信息,因此以下命令是我在命令提示符中编写的。

scrapy shell "http://finviz.com/insidertrading.ashx"

然后我使用firefox的firebug来查看页面的html代码。

我可以通过以下代码将一些信息(股票名称,内幕人员姓名和日期)收集到列表中:

response.css('td a.tab-link::text').extract()

然而,缺少其余信息。

我可以通过此代码获得一些(可能是大多数)缺失的信息(成本,股票,价值等)

response.css(td::text).extract()

我无法弄清楚如何在一次刮擦中干净利落地获取所有信息。

感谢。

编辑:另一个选择是迭代地收集数据,一次一行,所以我可以随意分开它。我也在沉思这一点。

1 个答案:

答案 0 :(得分:2)

由于数据是表格式的,因此表行和列的位置是可预测且稳定的。您可以简单地提取行中的所有文本并将其解压缩为变量:

for row in response.xpath("//tr[@class='insider-option-row']"):
    items = row.xpath('td/a/text() | td/text()').extract()
    ticker, owner, relationship, date, transaction, cost, shares, value, shares_total, sec_form_4 = items