Обработка списка элементов как ошибка одного элемента: как найти ссылки в каждой «ссылке» в уже записанной строке - PullRequest
0 голосов
/ 11 июля 2019

Я пишу код Python, чтобы очистить pdf-файлы собраний с этого сайта: https://www.gmcameetings.co.uk Ссылки в формате PDF находятся внутри ссылок, которые также находятся внутри ссылок.У меня есть первый набор ссылок на странице выше, а затем мне нужно очистить ссылки в новых URL.Когда я делаю это, я получаю следующую ошибку:

AttributeError: ResultSet object has no attribute 'find_all'. You're 
probably treating a list of items like a single item. Did you call 
find_all() when you meant to call find()?

Это мой код, который до сих пор в порядке и проверен в блокноте jupyter:

# importing libaries and defining
import requests
import urllib.request
import time 
from bs4 import BeautifulSoup as bs

# set url
url = "https://www.gmcameetings.co.uk/" 

# grab html 
r = requests.get(url)
page = r.text
soup = bs(page,'lxml')

# creating folder to store pfds - if not create seperate folder
folder_location = r'E:\Internship\WORK'

# getting all meeting href off url
meeting_links = soup.find_all('a',href='TRUE')
for link in meeting_links:
    print(link['href'])
    if link['href'].find('/meetings/')>1:
        print("Meeting!") 

Это строка, которая затемполучает ошибку:

second_links = meeting_links.find_all('a', href='TRUE')

Я пробовал find (), как предполагает python, но это тоже не работает.Но я понимаю, что он не может рассматривать meeting_links как один элемент.

В общем, как вам искать ссылки в каждом бите новой строковой переменной (meeting_links).

У меня уже есть код для получения pdf, когда у меня есть второй набор URL-адресов, который, кажется, работает нормально, но, очевидно, нужно сначала получить их.Надеюсь, это имеет смысл, и я все объяснил - я только правильно начал использовать python в понедельник, поэтому я начинающий.

1 Ответ

1 голос
/ 11 июля 2019

Чтобы получить все ссылки на собрания, попробуйте

from bs4 import BeautifulSoup as bs
import requests

# set url
url = "https://www.gmcameetings.co.uk/" 

# grab html 
r = requests.get(url)
page = r.text
soup = bs(page,'lxml')

# Scrape to find all links
all_links = soup.find_all('a', href=True)

# Loop through links to find those containing '/meetings/'
meeting_links = []
for link in all_links:
    href = link['href']
    if '/meetings/' in href:
        meeting_links.append(href)
print(meeting_links)

Функция .find(), которую вы используете в своем исходном коде, специфична для красивых суповых объектов. Чтобы найти подстроку в строке, просто используйте собственный Python: 'a' in 'abcd'.

Надеюсь, это поможет!

...