Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 子问题_Python_Xpath_Web Scraping_Scrapy_Scrapy Spider - Fatal编程技术网

Python 子问题

Python 子问题,python,xpath,web-scraping,scrapy,scrapy-spider,Python,Xpath,Web Scraping,Scrapy,Scrapy Spider,使用scrapy python库构建webscraper来刮取此页面,以便用所有团队名称及其对应的部门填充数据库。我正在尝试编写解析函数,但是我仍然不知道如何提取相应的部门名称以匹配每个团队 [1] 我的解析函数能够返回团队列表和列出所有部门的相应部门列表。现在我不知道如何指定确切的划分,因为在我看来,我必须使用前面的子关系从所选的团队名称(由item['team']=sel.xpath(mex+“/div/h5/a/text()”[I]表示)导航到DOM(将包括一个网站,我一直遵循作为一个教程

使用scrapy python库构建webscraper来刮取此页面,以便用所有团队名称及其对应的部门填充数据库。我正在尝试编写解析函数,但是我仍然不知道如何提取相应的部门名称以匹配每个团队

[1]

我的解析函数能够返回团队列表和列出所有部门的相应部门列表。现在我不知道如何指定确切的划分,因为在我看来,我必须使用前面的子关系从所选的团队名称(由item['team']=sel.xpath(mex+“/div/h5/a/text()”[I]表示)导航到DOM(将包括一个网站,我一直遵循作为一个教程,但我没有10个信誉点)以获得正确的划分,但我不知道如何写

如果我在这方面走错了方向,请告诉我,因为我不是XPath专家。实际上,我甚至不确定我是否需要一个计数器,就像我删除了[I]一样,然后我只得到30个列表,包含所有30个团队。

让我们简化一下

每个部门由
div
mod teams list medium
类表示。每个部门由两部分组成:

  • 包含部门名称的class=“mod header”的div
  • 包含团队列表的class=“mod content”的div
在您的蜘蛛体内,它将以以下方式反映:

for division in response.xpath('//div[@id="content"]//div[contains(@class, "mod-teams-list-medium")]'):
    division_name = division.xpath('.//div[contains(@class, "mod-header")]/h4/text()').extract()[0]
    print division_name
    print 

    for team in division.xpath('.//div[contains(@class, "mod-content")]//li'):
        team_name = team.xpath('.//h5/a/text()').extract()[0]

        print team_name
    print "------"
下面是我在控制台上看到的内容:

Atlantic

Boston Celtics
Brooklyn Nets
New York Knicks
Philadelphia 76ers
Toronto Raptors
------
Pacific

Golden State Warriors
Los Angeles Clippers
Los Angeles Lakers
Phoenix Suns
Sacramento Kings
------
...

请回顾您过去的问题,并接受有助于解决您问题的答案。谢谢。太棒了!我最初认为它是这样的,因为从子节点开始,然后向后遍历似乎很复杂,这样我就可以从DOM的更高位置开始,并选择我想要的相关子节点。
Atlantic

Boston Celtics
Brooklyn Nets
New York Knicks
Philadelphia 76ers
Toronto Raptors
------
Pacific

Golden State Warriors
Los Angeles Clippers
Los Angeles Lakers
Phoenix Suns
Sacramento Kings
------
...