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

2024-04-28

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”将保留在列表中。

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

类型错误:“NoneType”对象不可调用。

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

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

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

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


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

个别项目find_all(),在你的情况下你调用的变量"string"属于类型bs4.element.Tag.

As your contains函数期望type str,你的 for 循环应该类似于:

for string in menu:
    if contains("contact", str(string)):
      filtered_menu.append(string)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Beautiful Soup 中 find_all 方法的返回类型是什么? 的相关文章

随机推荐