我已经写了一个使用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