【问题标题】:Crawler : go to the next page, best pratice爬虫:转到下一页,最佳实践
【发布时间】:2014-11-17 10:12:39
【问题描述】:

我目前正在写一个python爬虫,我想切换到下一页但是最好的做法是什么?

其实很简单,url 的结尾是 .html?page=1,所以我可以增加页码,但是有没有最好的做法让这件事尽可能干净?

我使用 urllib、url 解析和 beautifulSoup

#!/usr/bin/env python2
import urllib
import urlparse
from bs4 import BeautifulSoup


def getURL():
    try:
        fo = open("WebsiteToCrawl", "rw")
        print ok() + "Data to crawl a store in : ", fo.name
    except:
        print fail() + "File doesn't exist, please create WebSiteTOCrawl file for store website     listing"
    line = fo.readlines()
    print ok() + "Return website : %s" % (line)
    fo.close()
    i= 0
    while i<len(line):
        try:
            returnDATA = urllib.urlopen(line[i]).read()
            print ok() + "Handle :" + line[i]            
            handleDATA(returnDATA)
        except:
            print fail() + "Can't open url"
        i += 1

def handleDATA(returnDATA):
try:
        soup = BeautifulSoup(returnDATA)
        for link in soup.find_all('a'):
            urls = link.get('href')
        try:
           print urls
        except:
            print end() + "EOF: All site crawled"

def main():
    useDATA = getURL()
    handleDATA(useDATA)

if __name__ == "__main__":
    main()

注意:我的代码比原来的要简单

【问题讨论】:

  • 你写了什么??显示
  • 是特定的网站爬虫吗?或者您应该抓取任何网站?如果有任何网站 - 没有正确答案,它们都非常不同,有些甚至没有“下一页”的概念。
  • @Rusty,我的爬虫有一个列表(大约 20 个网站),你说得对,它们都非常不同,但我尝试从通用功能开始,在特定功能之后
  • @Hackaholic 我已经添加了我的代码,但是我没有写任何关于下一页功能的内容。
  • 我不能给你一个具体的答案,但我会在页面上找到“下一步”按钮并使用其中的链接转到下一页。这是因为手动更改页面可能包含一些限制,例如:在某些站点上,第一页没有显示带有 get 参数,某些站点会给您一个有效的页面,但是如果您超出限制,则为空页面,其他站点会给您最后可能的页面。但是,使用按钮,他们可能会停止显示它,或者让它转到同一页面等。

标签: python beautifulsoup web-crawler urllib


【解决方案1】:

如果它像更改 url 中的数字一样简单,那么就这样做。

但是,您应该考虑如何知道何时停止。如果页面在底部返回分页详细信息(例如 Back 1 2 3 4 5 ... 18 Next),那么您可以抓取该元素的内容并找到 18。

另一种方法,虽然速度较慢,但​​会解析每个页面上的分页链接,并通过直接打开 url 或使用单击方法单击下一步来手动跟踪它们,直到页面上不再出现下一个。我不直接使用 urllib,但它可以通过 Selenium 的 python 绑定(如果你需要它是无头的,由 PhantomJS 驱动)非常容易地完成。如果您没有 AJAX 处理,您也可以使用 RoboBrowser 用更少量的代码来完成整个例程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多