Crawler:转到下一页,最佳做法

时间:2014-11-17 10:12:39

标签: python beautifulsoup web-crawler urllib

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

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

我使用urllib,url parse和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()

注意:我已经把代码简化为原来的

1 个答案:

答案 0 :(得分:0)

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

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

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