python收集网页中的翻页

要用采集器采集网页中的图片,由于网址里面的下一页是javascript形式的,此采集器无法判断,所以先用python把网址搜集起来。
观察到每翻一页,网址后面的页码数+1。为提高效率,减少访问数,先找到可见的最后一个链接,根据此链接页码数,拼凑出前面网址。

然后访问最后链接,查找是否有“下一页”字段,如果有,就拼凑出下一页网址。


#!/usr/bin/python
# -*- coding: UTF-8 -*-
import requests
from lxml import etree
def find_url(url):
    global count,newUrl

    #找到最后一个课程链接,取出页码,拼凑1至此页码的网址并添加到列表newUrl。
    #XPath规则可在chrome中查看。
    r = requests.get(url+'001.htm')
    count += 1
    html = etree.HTML(r.text)
    #找到最后一个可见链接
    result = html.xpath('//div[@class="xxxxxx"]/a[last()]/@href')
    #取出链接中的页码数
    maxNumber = int(result[0].split('/')[-1].split('.')[0])
    print maxNumber
    #拼凑前面网址添加到列表newUrl
    for i in xrange(1,maxNumber+1):
        nextUrl = "{0}{1:0>3}.htm".format(url , i)
        newUrl.append(nextUrl)
    
    #判断网页中是否有“下一页”,如果有,拼凑出下一页网址,并添加到newUrl
    nextR = requests.get(newUrl[-1])
    count += 1
    nextR.encoding = 'GBK'
    #查找“title="下一页"”
    while nextR.text.find(u'title="下一页"') != -1:
        maxNumber += 1
        nextUrl = "{0}{1:0>3}.htm".format(url , maxNumber)
        newUrl.append(nextUrl)
        print maxNumber
        try:
            nextR = requests.get(nextUrl)
            count += 1
            nextR.encoding = 'GBK'
        except:
            break     
    print '访问url数:',count   

#记录访问数,每访问一次,count加1
count = 0
#用于存储url的列表
newUrl = []

for row in open(u'E:/xx/xxxx/rjb_1.txt','r'):
    find_url(row.strip())
    #存入文本
    with open(u'E:/xx/xxxx/url_a1.txt','a') as f:
        for url in newUrl:
            print >> f,url
    newUrl = []

猜你喜欢

转载自blog.csdn.net/sily75/article/details/52847372