首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xpath前面的子问题

xpath前面的子问题
EN

Stack Overflow用户
提问于 2014-12-30 18:40:24
回答 1查看 115关注 0票数 1

使用scrapy库构建一个用于刮取此页面的http://espn.go.com/nba/teams,以便将所有的团队名称和相应的部门填充到数据库中。我正在尝试编写我的解析函数,但是,我仍然不完全理解如何提取相应的部门名称来匹配每个团队。

1

代码语言:javascript
复制
def parse(self,response):
    items = []
    mex = "//div[@class='span-6']/div[@class='span-4']/div/div/div/div[2]/ul/li"
    i=0
    for sel in response.xpath(mex):
        item = TeamStats()
        item['team'] = sel.xpath(mex + "/div/h5/a/text()")[i]
        item['division'] = sel.xpath("//div[@class='span-6']/div[@class='span-4']/div/div/div/div[1]/h4")
        items.append(item)
        i=i+1
    return items

我的解析函数能够返回一个团队列表和一个相应的部门列表,其中列出了所有的部门。现在我并不是真正地指定确切的划分,因为在我看来,我必须从所选的团队名称中导航(它由‘team’= sel.xpath(mex +“/div/h5/a/text()”表示)通过使用前面的子关系(将包括我作为教程跟踪的一个网站,但我没有10个声誉点)来获得正确的划分,但我不知道如何编写.

如果我在这方面走错了轨道,请告诉我,因为我不是XPath方面的专家。我甚至不确定我是否需要一个计数器,就好像我删除了我,然后我得到了30份名单,所有的30支球队。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-30 18:53:07

让我们简单点。

每个除法都用div表示,其中包含一个mod-teams-list-medium类。每个司由两个部分组成:

  • 包含分区名称的class=“mod-头”的div。
  • 包含团队列表的class="mod-content“的div

在你的蜘蛛体内,它会以这样的方式反射:

代码语言:javascript
复制
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 "------"

我在控制台上看到的是:

代码语言:javascript
复制
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
------
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27710766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档