【问题标题】:Data scraping: How to check if a web page contains a specific string数据抓取:如何检查网页是否包含特定字符串
【发布时间】:2016-05-02 21:52:47
【问题描述】:

我需要创建一个“if 语句”来检查字符串“cette entreprise est membre de la FVE”是否是网页的一部分。

item_url = "http://www.fveconstruction.ch/anDetails.aspRT=2&M=01&R=1&ID=42105701"
response = requests.get(item_url)
soup = BeautifulSoup(response.text, 'html.parser')
test = soup.findAll(text = re.compile('cette entreprise est membre de la FVE.\w+..\w+'))
print(test)

它会打印出一个空列表。有人有想法吗? 我想知道如何检查声明?如果我写:

if soup.findAll(text = re.compile('cette entreprise est membre de la FVE.\w+..\w+')): 
     do smth
else:
     do smth

如果没有我要查找的字符串,它应该返回 false 对吗?

【问题讨论】:

  • 为什么不能直接使用'text' in response.text
  • 是的,如果findAll返回一个空列表,将被视为false,代码将转到else
  • 在编辑之前,这篇文章说.findAll() ...如果您使用的是BS4,最好使用.find_all(),因为findAll来自bs3

标签: python python-3.x web-scraping beautifulsoup


【解决方案1】:

我检查了您在代码中提供的页面的 HTML 并注意到两件事。这是您要查找的文本的实际 HTML:

<span class="entrepriseDef">Cette entreprise est membre de la FVE&nbsp;&nbsp;</span>

我在您的代码中看到的两个问题是您正在搜索小写的“c”,而不是大写的“C”。此外,您正在搜索文本末尾不存在的句点。当您对网站进行屏幕抓取时,请查看该页面的 HTML(在浏览器中键入 Control+U 以查看 HTML)并搜索确切的文本。然后将该文本复制/粘贴到您的代码中,使其准确无误。

你的代码应该是这样的:

item_url = "http://www.fveconstruction.ch/anDetails.asp?RT=2&M=01&R=1&ID=42105701"
response = requests.get(item_url)
soup = BeautifulSoup(response.text, 'html.parser')
test = soup.findAll(text = re.compile('Cette entreprise est membre de la FVE\w+..\w+'))
print(test)

【讨论】:

    【解决方案2】:

    我无法知道您的 regex 是否有效,因为您的正则表达式不是您帖子的一部分。

    此答案是向您展示如何检查“网页是否包含特定字符串”,而不会出现regex 问题。

    import requests
    r = requests.get('http://www.fveconstruction.ch/anDetails.asp?
    RT=2&M=01&R=1&ID=42105701')
    
    if 'cette entreprise est membre de la FVE.' in r.text:
        print ('Yes')
    else:
        print ('No')
    

    【讨论】:

    • 感谢您的回答,但为什么它返回“否”,它应该返回“是”。网站上有什么特别的吗?如果您查看 url,就在粗体标题“A.GUIDO & FILS SA”下方,写着“Cette entreprise est membre de la FVE”?
    • 您的代码中有cette,在您的评论中您使用大写C 编写了Cette。此外,您的代码中有一个. 句点不在您的评论中。确保if 语句中的string 与文本中的完全相同。
    猜你喜欢
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2010-11-16
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多