使用 Beautiful Soup 提取链接的等效正则表达式

Posted

技术标签:

【中文标题】使用 Beautiful Soup 提取链接的等效正则表达式【英文标题】:Equivalent regular expression to extract link using Beautiful Soup 【发布时间】:2019-08-28 23:37:12 【问题描述】:

我正在尝试通过 python 随机探索 Webscraping。我有 google 搜索结果页面的链接。我使用 url lib 来提取 GOOGLE 搜索结果页面中存在的所有链接。从谷歌的解析页面中,我在 Beautiful Soup 库的帮助下提取所有可能的锚标签。所以现在我有很多链接。在那些我想选择与我所需模式匹配的选定链接中。 示例我想选择所有这些行: 这是被解析的众多链接之一。但我想缩小这样的链接的结果

/url?q=http://avadl.uploadt.com/DL4/Film/&sa=U&ved=0ahUKEwiYwOKe1r7hAhWUf30KHcHUBkMQFggUMAA&usg=AOvVaw39cIJ0T8_CAQMY8EkSWZJl

在这些精选中,我只需要提取这部分

http://avadl.uploadt.com/DL4/Film/

我试过这个和这个

possible_websites.append(re.findall('/url?q=(\S+)',links))
possible_websites.append(re.findall('/url?q=(\S+^&)',links))

这是我的代码

soup = BeautifulSoup(webpage, 'html.parser')
tags = soup('a')
possible_websites=[]
for tag in tags:
    links = tag.get('href', None)
    possible_websites.append(re.findall('/url?q=(\S+)',links))

我想使用正则表达式来提取所需的文本部分。我正在使用 Beautiful soup 模块来提取 HTML 数据。简而言之,这是一个正则表达式问题。

【问题讨论】:

你有什么问题? 如何通过正则表达式从/url获取avadl.uploadt.com/DL4/Film?q=avadl.uploadt.com/DL4/Film/… 请仔细阅读问题以便理解 URL query parameters to dict python的可能重复 【参考方案1】:

这不是正则表达式,但我会使用urllib:

from urllib.parse import parse_qs, urlparse

url = urlparse('/url?q=http://avadl.uploadt.com/DL4/Film/&sa=U&ved=0ahUKEwiYwOKe1r7hAhWUf30KHcHUBkMQFggUMAA&usg=AOvVaw39cIJ0T8_CAQMY8EkSWZJl')
qs = parse_qs(url.query)

print(qs['q'][0])

【讨论】:

您可能没有阅读问题。我已经解析了我的链接。这就是我获得此链接的方式 @EXODIA:您解析了 HTML 以获取 URL。这会解析 URL 以获取 q 参数的值。尝试运行它。 @QHarr:我贴错了,抱歉。应该是qs['q'],而不是qs.q【参考方案2】:

如果您确实需要正则表达式,请使用q=(.*/)&,否则请使用Ry-'s answer,即:

import re
u = "/url?q=http://avadl.uploadt.com/DL4/Film/&sa=U&ved=0ahUKEwiYwOKe1r7hAhWUf30KHcHUBkMQFggUMAA&usg=AOvVaw39cIJ0T8_CAQMY8EkSWZJl"
m = re.findall("q=(.*/)&", u)
if m:
    print(m[0])
    # http://avadl.uploadt.com/DL4/Film/

Demo

【讨论】:

是的,它的工作原理,我明白如何,但你能告诉可能的问题。append(re.findall('/url?q=(\S+^&)',links)) 或 possible_websites.append(re.findall('/url?q=(\S+)',links)) ? 是正则表达式中的特殊字符。如果你想要一个文字问号,你需要转义它,就像这样:\?。同样re.findall 将单个字符串作为其第二个参数,而不是字符串列表。

以上是关于使用 Beautiful Soup 提取链接的等效正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

用 Beautiful Soup 提取 href

Beautiful Soup - 在文章中找到第一个链接

python 使用Beautiful Soup从页面中提取数据

使用Beautiful Soup 4提取特定列表项

如何使用 Beautiful Soup 提取此 HTML 元素属性的值?

Beautiful Soup - 在 div 之后提取