我已經寫了一個使用python從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
順便說一句,這只是一個quickfix解決方案,正如你剛纔提到的那樣,你剛剛開始了你的拼搶之旅。但我建議你在將來嘗試@ randomir的解決方案/建議。這樣,你可以製造更好,更高效的刮板。 – jabargas
對不起,剛剛意識到,因爲film_storage是全局的,所以不需要return語句。 – jabargas