Python 尝试使用Scrapy从表中提取数据
我在Vista 64位上使用Python.org 2.7 64位版本。我有目前的剪贴代码,它现在可以很好地提取文本,但我有点被困在如何从网站上的表中获取数据的问题上。我在网上查过答案,但我还是不确定。举个例子,我想得到下表中韦恩·鲁尼的进球得分数据: 我目前拥有的代码如下:Python 尝试使用Scrapy从表中提取数据,python,xpath,scrapy,Python,Xpath,Scrapy,我在Vista 64位上使用Python.org 2.7 64位版本。我有目前的剪贴代码,它现在可以很好地提取文本,但我有点被困在如何从网站上的表中获取数据的问题上。我在网上查过答案,但我还是不确定。举个例子,我想得到下表中韦恩·鲁尼的进球得分数据: 我目前拥有的代码如下: from scrapy.spider import Spider from scrapy.selector import Selector from scrapy.utils.markup import remove_ta
from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy.utils.markup import remove_tags
from scrapy.cmdline import execute
import re
class MySpider(Spider):
name = "Goals"
allowed_domains = ["whoscored.com"]
start_urls = ["http://www.whoscored.com/Players/3859/Fixtures/Wayne-Rooney"]
def parse(self, response):
titles = response.selector.xpath("normalize-space(//title)")
for titles in titles:
body = response.xpath("//p").extract()
body2 = "".join(body)
print remove_tags(body2).encode('utf-8')
execute(['scrapy','crawl','goals'])
在xpath()语句中需要使用什么语法来获取表格数据
谢谢我刚刚看到了页面链接,在这个Xpath表达式中,我得到了您想要的锦标赛表的所有行:
'//table[@id=“player fixture”]//tr[td[@class=“tournament”]]
我将尝试解释此Xpath表达式的每个部分:
:检索id属性为//表格[@id=“player fixture”]
的整个表格,您可以在该页面中查看player fixture
:使用所需的每个比赛的信息检索所有行//tr[td[@class=“tournament”]
tr
)位于某个表下,该表的id
是唯一的(player fixture
)
获取所有行后,您可以对它们进行循环,以从每个行条目中获取所需的所有信息。要获取数据,通常需要标识表,然后对行进行循环。 像这样的html表通常具有以下格式:
<table id="thistable">
<tr>
<th>Header1</th>
<th>Header2</th>
</tr>
<tr>
<td>data1</td>
<td>data2</td>
</tr>
</table>
首先,我用sel.css(“table#player fixture>tbody>tr”)
标识数据行,并循环结果,然后提取数据
编辑:items.py()
首先,对于您想要的每个符号,您必须知道与此符号关联的名称。例如,对于目标,我看到一个title属性等于“Goal”的
元素,以及一个title属性等于“Assist”的
元素作为符号Assist
考虑到这些信息,您可以检查检索到的每一行是否包含与要检索的符号关联的所需标题名的范围
要获取一行的所有目标符号,可以使用表达式//span[@title=“Goal”
计算该行,如下所示:
for row in response.selector.xpath(
'//table[@id="player-fixture"]//tr[td[@class="tournament"]]'):
# Is this row contains goal symbols?
list_of_goals = row.xpath('//span[@title="Goal"')
if list_of_goals:
# Output goals text.
.
.
.
如果检索到非空列表,则表示此行中有目标符号。因此,您可以输出多少目标文本以及返回的跨度列表的长度,如上所述。您试图从中获取什么page@PadraicCunningham“韦恩·鲁尼的比赛历史记录”下面的表格中的数据……我有一个lo在线查看一些xpath示例,但在本例中似乎没有返回任何信息。我按F12检查页面结构,但我不确定我在看什么。您好,感谢您的回复。使用上面的示例,我从该表中获得了所有信息,除了包含目标和辅助数据的列不表示为文本。您知道我如何才能将它们作为我可以转换为“目标”和“协助”等文本的内容包含在我的输出中吗?@user3045351嗨,我决定在下一个答案中回答您的疑问,而不是在这里发表评论。嗨,谢谢您的回复。上面的模块“myproject.item”是什么?myproject应该重复什么向我发送了本地名称,或者我需要安装一个名为“myproject”的模块?myproject是您项目的名称。因此,如果您执行
scrapy startproject newproject
,该模块将被称为newproject。这允许您访问myproject/myproject文件夹中的所有内容,而无需使用sys。我的项目称为test,所以我尝试了“从测试导入夹具”和“从测试项目导入夹具”,两者都不起作用?首先,你必须在items.py文件中声明你的项目。然后你可以使用从test.items导入夹具导入它。为了清楚起见,我编辑了答案。好的,我修改了items.py的内容。我的剪贴画项目在t中路径C:\Python27\mrscrap\mrscrap\spiders\test.py。items.py文件比它高一级。我仍然不知道我应该选择“test.items”、“mrscrap.items”还是“spiders.items”?我已经尝试了这三种方法,但不幸的是它们都不起作用了?在你放了“输出目标文本”的地方,我放了“打印目标列表”并得到了以下信息由于错误:“回溯(最近一次调用):文件“c:\Python27\lib\site packages\twisted\internet\base.py”,第1201行,在mainLoop self.rununtlcurrent()文件“c:\Python27\lib\site packages\twisted\internet\base.py”,第824行,在rununtlcurrent call.func(*.args,**call.kw)文件中“c:\Python27\lib\site packages\twisted\internet\defer.py”,在回调self中的第383行。\ u startRunCallbacks(结果)文件“c:\Python27\lib\site packages\twisted\internet\defer.py”,在\u startRunCallbacks self中的第491行。\ u runCallbacks()----文件“c:\Python27\lib\site packages\twisted\internet\defer.py”“,第578行,在_runcallbackscurrent.result=callback(current.result,*args,**kw)文件“c:\Python27\lib\site packages\scrapy\spider.py”,第56行,在parse raise raise NotImplementedError exceptions.NotImplementedError:”…我做错了什么?
class Fixture(Item):
tournament = Field()
date = Field()
team_home = Field()
for row in response.selector.xpath(
'//table[@id="player-fixture"]//tr[td[@class="tournament"]]'):
# Is this row contains goal symbols?
list_of_goals = row.xpath('//span[@title="Goal"')
if list_of_goals:
# Output goals text.
.
.
.