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) ) ︶ ︶︶
一些事情一直在干,说不定以后就结果了呢
本文来自博客园,作者:chenjianwen,转载请注明原文链接:https://www.cnblogs.com/chenjw-note/articles/7448548.html