首页 > 解决方案 > 从 html 请求中提取特定行到变量中

问题描述

这是我正在尝试做的事情:

我到处搜索以了解如何做到这一点,但人们只解释如何提取整个源或使用字典。

例如,使用 WWE 页面:

来源:查看来源:http ://network.wwe.com/video/v2525697583?contextType=wwe-show&contextId=wwe_nxt_uk&contentId=300687284&watchlistAltButtonContext=series

我想提取包含此字符串的行

http://thumbs.media.net.wwe.com/wwe/

代码:

def extract(url):
    html = requests.get(url)
    text = html.text
    word = None
    for line in text:
        if 'http://thumbs.media.net.wwe.com/wwe/' in line:
            word = line
    return word

当我执行该功能时,程序将返回 None 作为第一次分配。

注意我只需要第一个匹配项,而不是所有其他匹配项

标签: pythonweb-scraping

解决方案


这应该有效:

def extract(url):
    response = requests.get(url)
    searchstr = 'http://thumbs.media.net.wwe.com/wwe/' 
    for line in response.text.split("\n"):
        if searchstr in line:
            return line
    return None

或者,更短:

def extract(url, searchstr):
    return next((line for line in requests.get(url).text.split("\n") if searchstr in line), None)

print(extract('http://www.url.com', 'http://thumbs.media.net.wwe.com/wwe/'))

或者使用正则表达式更好:

def extract(url, searchstr):
    match = re.search(rf"^(.*{searchstr}.*)$", requests.get(url).text, re.MULTILINE)
    return match.group(1) if match else None

print(extract('http://www.url.com', 'http://thumbs.media.net.wwe.com/wwe/'))

推荐阅读