Что касается ошибки вашей схемы ...
Вы получаете ошибку схемы, потому что вы перезаписываете одну ссылку снова и снова. Затем вы пытаетесь вызвать эту ссылку, как если бы это был список ссылок. На данный момент это строка, и вы просто перебираете символы (начиная с h
), следовательно, возникает ошибка.
См. Здесь: requests.exceptions.MissingSchema: Invalid URL 'h': Схема не предоставлена
Что касается общего запроса и как решить что-то вроде этого ...
Если бы я был для этого поток будет go следующим образом:
- Получить три href (аналогично тому, что вы уже сделали)
- Используйте функцию, которая очищает href потока по отдельности и возвращает все, что вы хотите, чтобы они вернули
- Сохранить / добавить эту возвращенную информацию, где хотите.
- Повторить
Что-то вроде этого, возможно
import csv
import time
from bs4 import BeautifulSoup
import requests
source = requests.get('https://mainforum.com')
soup = BeautifulSoup(source.content, 'lxml')
all_thread_info = []
def scrape_thread_link(href):
response = requests.get(href)
#parse thread link
soup= BeautifulSoup(response.content, 'lxml')
#return data
return [p.text for p in soup.find_all('p')]
#get the thread href (thread_link)
for threads in soup.find_all('p', class_= 'small'):
this_thread_info = {}
this_thread_info["thread_name"] = threads.text
this_thread_info["thread_link"] = threads.a.get('href')
this_thread_info["thread_data"] = scrape_thread_link(this_thread_info["thread_link"])
all_thread_info.append(this_thread_info)
print(all_thread_info)
В исходном вопросе довольно много неуказанного, поэтому я сделал некоторые предположения. В идеале, вы можете видеть суть.
Также обратите внимание, что я предпочитаю использовать .content
из response
вместо .text
.