【问题标题】:Scraping data python lxml抓取数据python lxml
【发布时间】:2015-03-10 11:09:53
【问题描述】:

我正在尝试通过抓取来检索特定字符串。然而,它似乎什么也没返回。我正在使用 python 和 lxml,但似乎没有返回 a 标签内的字符串。

这是我要检索的 html

<fieldset>
    <legend align="center">
        <a href="/counterstrike/events/302-cs-go-champions-league">CS:GO Champions League</a>
    </legend>
</fieldset>

这是我尝试过的

def get_league(self):
    request = requests.get(self.url)
    tree = html.fromstring(request.content)
    league = tree.xpath("//legend[@class='center']//a")
    return league

【问题讨论】:

  • 你的预期输出是什么?
  • CS:GO 冠军联赛
  • 在 HTML 中,有一个 align 属性。但是在您的 XPath 表达式中,您正在寻找具有 class 属性的 legend 元素。

标签: python lxml


【解决方案1】:

使用 xpath 显式选择文本

//legend[@align='center']/a/text()

这个 chrome 插件在编写 lxml 查询时很有帮助 Xpath Helper

【讨论】:

    【解决方案2】:

    试试这个,它不是 lxml,但你可以将它用于抓取目的。 首先我要定义我自己的函数,这样会更容易刮

    def getBetweenHTML(strSource, strStart,strEnd):
        start = strSource.find(strStart) + len(strStart)
        end = strSource.find(strEnd,start)
        return strSource[start:end]
    

    之后,我会这样做:

    def get_league(self):
        import urllib2
        url = urllib2.urlopen(self.url).read()
        getBetweenHTML(url, '<a href="/counterstrike/events/302-cs-go-champions-league">',"</a>")
    

    这对我有用,它只是一种选择。如果不是你要的,告诉我,我会为 lxml 重写。

    【讨论】:

    • 对不起,我在这个 api 中使用了 lxml,需要保持这种状态,但是谢谢你的时间
    猜你喜欢
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2018-09-13
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多