使用 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 提取链接的等效正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
python 使用Beautiful Soup从页面中提取数据