python爬虫一之爬取分页下的内容

python爬虫之爬去分页下的内容

                     --chenjianwen

  思想转换:最近一直在弄爬虫,感觉非常有意思。但中间常遇到一些苦恼的事情,比如网站分页的这个事情。之前看到分页总是要去看它的总页码,然后再定义range(),再用for循环去历遍拼接url,慢慢的感觉这个做法很low。所以也苦恼了一阵子,各种找资料也找不到相对应的方法。还好,在今天搞定它了.

  但是过两天学习了多进程http://www.cnblogs.com/chenjw-note/articles/7454218.html后,反而觉得这个方法的速度太慢了,还是去拿它的总页码比较快............

╭︿︿︿╮

{/ $  $ /}

 ( (oo) ) 

 ︶ ︶ ︶

  思路实现:从主页爬取并匹配到下一页的链接 --> 爬取下一页的所需的信息 --> 并从下一页中得到下一页的链接(此处使用while循环实现)--> 最后在while循环中执行for循环爬取内容

1.分页使用while循环获取

2.获取详细信息在while循环中执行for循环

3.具体事例及注释,url:http://www.szwj72.cn/article/hsyy/Index.html

#!/usr/bin/evn python
# _*_ coding: utf-8 _*_

import urllib2,urllib,requests
import re
import json
import os
import time,datetime
import threading
##解决python2.7编码问题
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

url = 'http://www.szwj72.cn/article/hsyy/Index.html'
send_headers = {
 'Host':'www.szwj72.cn',
 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',
 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
 'Connection':'keep-alive'
}
#匹配下一页链接
req = urllib2.Request(url,headers=send_headers)
html = urllib2.urlopen(req).read().decode('gbk','ignore').encode('utf-8')
reg = re.compile(r'<p class="(.*?)</a> <a href="//(www.szwj72.cn/.*?.html">下一页)</a> <a href="//www.szwj72.cn/Article/hsyy/index_100.html">尾页</a></p>')

#获取文章链接
def getAtUrl(next_page):
    req = urllib2.Request(next_page,headers=send_headers)
    html = urllib2.urlopen(req).read().decode('gbk','ignore').encode('utf-8')
    reg = re.compile(r'<h2><a href="(.*?)" title="(.*?)">(.*?)</a></h2>')
    return re.findall(reg,html)

while True:
    #print re.findall(reg,html)[0][1].split('<a')[-1].split('href="//')[1].split('">下一页')[0]
    #得到下一页地址
    next_page = 'http://' + re.findall(reg,html)[0][1].split('<a')[-1].split('href="//')[1].split('">下一页')[0]   #这个匹配切割感觉很无奈,哈哈~~~
    #print  next_page
    #把下一页地址传给getAtUrl()函数,并取得文章链接
    for i in getAtUrl(next_page):
        print i[0],i[1]
    #重新请求新页地址,并得到下一页的新地址
    req = urllib2.Request(next_page,headers=send_headers)
    html = urllib2.urlopen(req).read().decode('gbk','ignore').encode('utf-8')
    #循环直到页码耗尽
    #break

 


╭︿︿︿╮ {/ o  o /}   ( (oo) )     ︶ ︶︶

posted @ 2017-08-29 15:40  chenjianwen  阅读(2036)  评论(0编辑  收藏  举报