Можно ли как-то получить больше информации за раз при парсинге?
хочу скачать кучу сетов фотографий, но проблема, каждое фото сета находится на "разных" страницах.
И прямые ссылки на картинку, имеют хаотичные названия. Например: ...2t4tppc.jpg ,...1h7looe.jpg,...11ozv72.jpg.
Из-за этого приходится парсить каждую страницу и это занимает огромное количество времени. Соответветсвенно есть ли способ за раз получить список всех изображений? М.б он где-то хранится
Примерный код: Медленно, попорядку парсит каждое фото отдельно и сохраняет в фаил. Читал ещё по мультипоточность немного, но может есть ещё способы?
from bs4 import BeautifulSoup as bs
import requests
import csv
clerdatalinks = []
final = []
a = 1
with open("/home/..../links.csv") as fp:
reader = csv.reader(fp)
datalinks = [row for row in reader]
print(len(datalinks))
for element in datalinks:
print(a)
a +=1
pars = requests.get(element[0],stream = True, headers={'User-Agent': 'XYZ/3.0'})
soup0 = bs(pars.text,"html.parser")
NumberFoto = soup0.findAll('a',class_ = 'on-popunder page-numbers')
Name = soup0.findAll('a',class_ = 'on-popunder', rel="category tag")
NameSet = soup0.findAll('h2',class_ = 'main-title')
allinks = []
print(element[0])
if NumberFoto == []:
print("это не сет")
else:
link0 = element[0] # Ссылка на сет
name = Name[-1].text # Имя модели
n = int(NumberFoto[-1].text) # Сколько фото
nameSet = NameSet[0].text # Название сета
allinks.append(name)
allinks.append(nameSet)
for x in range(1,n+1):
url = link0 + "/" + str(x)
page = requests.get(url,stream = True, headers={'User-Agent': 'XYZ/3.0'})
soup = bs(page.text,"html.parser")
allfoto = soup.findAll('img',class_ = 'blur')
link = allfoto[0].get("src")
allinks.append(link)
with open('/home/alex/AutoSave/Texts/exp.csv','a') as fp:
writer = csv.writer(fp)
writer.writerow(allinks)
Ответы (1 шт):
Почитай про Scrappy . Он из коробки умеет многопоточность. Но посложнее будифулсупа.
Либо еслли не хочеш новый фреймворк учить можеш распаралелить процес. Тогда тебе вот это поможет Joblib