Ich habe einen Scraper mit Python geschrieben, um Filmnamen von Yiffy Torrents zu kratzen. Die Webseite hat ungefähr 12 Seiten durchlaufen. Wenn ich meinen Crawler mit der print
-Anweisung ausführe, erhält er alle Ergebnisse von allen Seiten. Wenn ich jedoch dasselbe mit return
starte, dann gibt es mir nur den Inhalt von der ersten Seite und gehe nicht zur nächsten Seite über, um den Rest zu verarbeiten. Da es mir schwer fällt, das Verhalten von return statement zu verstehen, wenn jemand darauf hinweist, wo ich falsch liege und mir einen Workaround gebe, wäre ich sehr glücklich. Danke im Voraus.Scraper sammelt nur den Inhalt der ersten Seite
Dies ist, was ich mit (den vollständigen Code) bin versucht:
import requests
from urllib.request import urljoin
from lxml.html import fromstring
main_link = "https://www.yify-torrent.org/search/western/"
# film_storage = [] #I tried like this as well (keeping the list storage outside the function)
def get_links(link):
root = fromstring(requests.get(link).text)
film_storage = []
for item in root.cssselect(".mv"):
name = item.cssselect("h3 a")[0].text
film_storage.append(name)
return film_storage
next_page = root.cssselect(".pager a:contains('Next')")[0].attrib['href'] if root.cssselect(".pager a:contains('Next')") else ""
if next_page:
full_link = urljoin(link,next_page)
get_links(full_link)
if __name__ == '__main__':
items = get_links(main_link)
for item in items:
print(item)
Aber, wenn ich wie unten tun, i (nur geklebt wesentlichen Teil) alle Ergebnisse erhalten:
def get_links(link):
root = fromstring(requests.get(link).text)
for item in root.cssselect(".mv"):
name = item.cssselect("h3 a")[0].text
print(name) ## using print i get all the results from all the pages
next_page = root.cssselect(".pager a:contains('Next')")[0].attrib['href'] if root.cssselect(".pager a:contains('Next')") else ""
if next_page:
full_link = urljoin(link,next_page)
get_links(full_link)
Dies scheint vielversprechend zu sein. Versuchen Sie es und lassen Sie es wissen. Vielen Dank. – SIM
Btw, dies ist nur eine Quickfix-Lösung, wie Sie erwähnt haben, dass Sie gerade Ihre Scraping-Reise beginnen. Aber ich schlage vor, dass Sie in der Zukunft @ Randomirs Lösung/Vorschläge versuchen. Auf diese Weise können Sie bessere und effizientere Abstreifer herstellen. – jabargas
Sorry, nur realisiert, da film_storage global ist, gibt es keine Notwendigkeit für die Rückkehr Aussage. – jabargas