gpt4 book ai didi

python - Beautiful Soup 中 find_all 方法的返回类型是什么?

转载 作者:行者123 更新时间:2023-12-01 06:21:12 26 4
gpt4 key购买 nike

from bs4 import BeautifulSoup, SoupStrainer 
from urllib.request import urlopen
import pandas as pd
import numpy as np
import re
import csv
import ssl
import json
from googlesearch import search
from queue import Queue
import re

links = []
menu = []
filtered_menu = []


def contains(substring, string):
if substring.lower() in string.lower():
return True
else:
return False


for website in search("mr puffs", tld="com", num=1, stop=1, country="canada", pause=4):
links.append(website)


soup = BeautifulSoup(urlopen(links.pop(0)), features="html.parser")
menu = soup.find_all('a', href=True)

for string in menu:
if contains("contact", string):
filtered_menu.append(string)


print(filtered_menu)

我正在创建一个网络爬虫,它将从网站中提取联系信息。但是,为了做到这一点,我需要访问网站的联系页面。使用 googlesearch 库,代码搜索关键字并将所有结果(最多一定限制)放入列表中。为简单起见,在此代码中,我们仅放入第一个链接。现在,通过这个链接,我正在创建一个漂亮的汤对象,并提取网站上的所有其他链接(因为通常在主页上找不到联系信息)。我将这些链接放在一个名为菜单的列表中。

现在,我想过滤菜单中仅包含“联系人”的链接。示例:“www.smallBusiness.com/our-services”将从新列表中删除,而“www.smallBusiness.com/contact”或“www.smallBusiness.com/contact-us”将保留在列表中。

我定义了一个方法来检查子字符串是否在字符串中。但是,我遇到以下异常:

TypeError: 'NoneType' object is not callable.

我尝试通过 re.search 使用正则表达式,但它说预期的字符串类型或类似字节的值不在参数中。

我认为这是因为find_all的返回类型不是字符串。这可能是我在文档中找不到的其他内容。如果是这样,如何将其转换为字符串?

根据下面答案的要求,打印菜单列表给出的内容如下:

从这里,我只想提取突出显示的链接:

here is the image

最佳答案

BeautifulSoup.find_all() 类型是 bs4.element.ResultSet (实际上是一个列表)

find_all() 的各个项目,在您的情况下,您称为 "string" 的变量的类型为 bs4.element.Tag

由于您的 contains 函数需要 type str,因此您的 for 循环应类似于:

for string in menu:
if contains("contact", str(string)):
filtered_menu.append(string)

关于python - Beautiful Soup 中 find_all 方法的返回类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60342987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com