저는 파이썬을 사용하여 yiffy 급류에서 영화 이름을 긁어 모으기 위해 작성했습니다. 웹 페이지는 약 12 페이지를 넘었습니다. print
문을 사용하여 크롤러를 실행하면 모든 페이지의 모든 결과가 표시됩니다. 그러나, return
을 사용하여 동일하게 실행하면 첫 번째 페이지의 콘텐츠 만 제공되고 나머지 페이지는 다음 페이지로 이동하지 않습니다. return 문의 동작을 이해하는 데 어려움을 겪고 있기 때문에 누군가 내가 잘못 가고있는 부분을 지적하고 해결 방법을 제공하면 매우 행복 할 것입니다. 미리 감사드립니다. 내가 아래와 같이 할 때, 나는 모든 결과 (붙여 넣기 요점 부분 만) 얻을첫 번째 페이지의 내용 만 수집하는 스크레이퍼
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)
하지만, :
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)
이
내가 (전체 코드)에 노력하고있어입니다
이것은 유망한 것 같습니다. 시도 해보고 알려주세요. 감사. – SIM
Btw, 이것은 단지 퀵 픽스 해결책 일뿐입니다. 그러나 나는 당신이 @ randomir의 해결책/제안을 장래에 시도 할 것을 제안한다. 그렇게하면 더 효율적이고 효율적으로 스크레이퍼를 만들 수 있습니다. – jabargas
죄송합니다. film_storage가 전역이므로 return 문이 필요하지 않습니다. – jabargas