【问题标题】:Python 3 - Getting some strings from a HTTPrequest responsePython 3 - 从 HTTPrequest 响应中获取一些字符串
【发布时间】:2013-06-11 21:54:34
【问题描述】:

我很难从 httprequest 响应中提取数据。

有人可以帮助我吗?这是我的代码的一部分:

import requests

r = requests.get('https://www.example.com', verify=True)
keyword = r.text.find('loginfield')
print (keyword)

>>> 42136

42136 值基本上意味着字符串 'loginfield' 存在于 response.text 中。但是如何从中提取特定的字符串呢?

例如,我想提取这些确切的字符串:

<title>Some title here</title>

或者这个:

<div id='bla...' #continues extracting of strings until it stops where I want it to stop extracting.

有人知道我应该如何解决这个问题吗?

【问题讨论】:

    标签: python string python-3.x httprequest text-parsing


    【解决方案1】:

    您可以使用BeautifulSoup 来解析 HTML 并获取标签。下面是一段代码示例:

    import requests
    from bs4 import BeautifulSoup as BS
    r = requests.get('https://www.example.com', verify=True)
    soup = BS(r.text)
    print(soup.find('title').text)
    

    应该打印:

    Some title here
    

    但取决于它是否是第一个标题

    【讨论】:

    • 谢谢!!但是听说BS在Python 3.x中不好用,如果我想像我在OP中写的第三个代码块那样提取多个div怎么办?
    • @ArthurCodova 然后您可以使用find_all,它,惊喜!,获得所有标题。那么你可以获得第三个元素([2])并调用.text。至于它在 python 3 中是否顺利,我不确定,因为我主要使用 python 2.7。但我不明白为什么它不应该工作。
    • 我找不到模块 bs4?我怎么能得到这个。对python有点陌生
    【解决方案2】:

    请注意,对于 HTML 页面数据提取,您应该查看专门的库,例如 Beautiful soup。这样,您的程序将不那么脆弱,并且更易于维护。


    如果字符串存在,

    string.find将返回-1

    您检索的页面中没有字符串“loginfield”。


    一旦你的字符串有正确的索引,返回的值就是该字符串的第一个字符的位置。

    因为你编辑了你的问题:

    >>> r.text.find('loginfield') 
    42136
    

    这意味着,字符串“loginfield”从文本中的偏移量 42136 开始。您可以以这种方式显示从该位置开始的 200 个字符:

    >>> print(r.text[42136:42136+200])
    

    要找到您要查找的各种值,您必须找出相对于该位置的位置。

    【讨论】:

    • 天哪!感谢您的更正,这是因为我总是输入 if keyword != -1: print ('found keyword') 也许这就是我感到困惑的原因。但是,我的问题仍然没有答案:|
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多