首页 > 解决方案 > 在网站中抓取关于我们的引用时没有结果

问题描述

我有一个网址列表,我想看看那里是否有一个名为“关于我们”或联系方式的部分。

我的方法如下(我如何确保我在特定网站的关于我们页面上):

import requests
from bs4 import BeautifulSoup as soup

url = ["https://www.stackoverflow.com", "http://grandeinganno.it", "https://towardsdatascience.com"]

for u in url: 
   response = requests.get(u)
   page = str(BeautifulSoup(response.content))


def getURL(page):

    start_link = page.find("a href")
    if start_link == -1:
        return None, 0
    start_quote = page.find('"', start_link)
    end_quote = page.find('"', start_quote + 1)
    url = page[start_quote + 1: end_quote]
    return url, end_quote

while True:
    url, n = getURL(page)
    page = page[n:]
    if url:
        print (url)
    else:
        break

以下代码检查属性内的“about”和元素href的文本:a

    def about_links(elm):
        return elm.name == "a" and ("about" in elm["href"].lower() or \
                                    "about" in elm.get_text().lower())


    soup.find_all(about_links) 

不幸的是,即使我使用该问题的代码和建议,当我开始在“关于我们'来自网站。

如何确定错误在哪里?

标签: pythonweb-scrapingbeautifulsoup

解决方案


该脚本将检查页面内是否存在<a>包含“关于”或“联系我们”的标签。如果是,返回True

import requests
from bs4 import BeautifulSoup


urls = ["https://www.stackoverflow.com", "http://grandeinganno.it", "https://towardsdatascience.com"]

def check(url):
    soup = BeautifulSoup(requests.get(url).content, 'html.parser')
    # check if there exists <a> tag with "about" or "contact us"
    tag = soup.find(lambda t: t.name=='a' and 'about' in t.text.lower() or 'contact us' in t.text.lower())
    return bool(tag)

for url in urls:
    print('{:<30} {}'.format(url, check(url)))

印刷:

https://www.stackoverflow.com  True
http://grandeinganno.it        False
https://towardsdatascience.com True

推荐阅读