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)
Привет, я создаю webscarper, который будет извлекать контактную информацию с сайтов. Однако для этого мне нужно перейти на страницу контактов сайта. Используя библиотеку googlesearch, код ищет ключевое слово и помещает все результаты (до определенного предела) в список. Для простоты в этом коде мы просто вставляем первую ссылку. Теперь по этой ссылке я создаю красивый объект супа и извлекаю все остальные ссылки на веб-сайте (поскольку контактная информация обычно отсутствует на главной странице). Я помещаю эти ссылки в список под названием menu.
Теперь я хочу отфильтровать меню только по тем ссылкам, в которых есть "contact". Пример: «www.smallBusiness.com/our-services» будет удалено из нового списка, а «www.smallBusiness.com/contact» или «www.smallBusiness.com/contact-us» останутся в списке.
Я определил метод, который проверяет, находится ли подстрока в строка. Однако я получаю следующее исключение: TypeError: объект 'NoneType' не вызывается. Я попытался использовать regex, выполнив re.search, но он говорит, что ожидаемый тип строки или байтового значения отсутствует в параметрах.
Я думаю, это потому, что возвращаемый тип find_all не является строкой , Это, вероятно, что-то еще, что я не могу найти в документах. Если это так, как я могу преобразовать его в строку.
Как и просили в ответе ниже, вот что дает список меню печати:
Отсюда я просто хочу извлечь выделенные ссылки:
вот изображение