【Python】爬虫小结
2015-10-21 16:48
691 查看
1.获取页面源代码
1.1获取http类型的页面源代码
import time,os,cookielib,urllib2,urllib import datetime,StringIO,gzip def getHtml(url,referurl=None,cookie=None,postdata=None,ip=None): cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())#伪装cookies if ip: proxy_support = urllib2.ProxyHandler({'http':ip})#代理 opener = urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler) urllib2.install_opener(opener) else: opener = urllib2.build_opener( cookie_support, urllib2.HTTPHandler) urllib2.install_opener(opener) headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0'}#伪装浏览器 req = urllib2.Request(url,headers = headers) if referurl: req.add_header('referer',referurl) if cookie: req.add_header('Cookie', cookie) if postdata: try: req.add_data(urllib.urlencode(postdata)) except: req.add_data(postdata) content=urllib2.urlopen(req,timeout=120).read() try: gzp_content = StringIO.StringIO(content) gzipper = gzip.GzipFile(fileobj =gzp_content) content =gzipper.read() except: 1 return content
1.2获取https类型的页面源代码
import pycurl,StringIO def getHtml(url): c=pycurl.Curl() c.setopt(c.URL, url) b = StringIO.StringIO() c.setopt(c.WRITEFUNCTION, b.write) c.setopt(c.COOKIEFILE, '') c.setopt(pycurl.USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)") c.setopt(c.HTTPHEADER, ['Accept: text/html', 'Accept-Charset: UTF-8']) c.setopt(c.SSL_VERIFYPEER, 0) c.setopt(c.SSL_VERIFYHOST, 0) c.setopt(c.FOLLOWLOCATION, 1) c.setopt(c.HEADER,False) c.perform() html=b.getvalue() b.close() c.close() return html
2.抓取带JS的页面信息(下拉加载,点击加载等)
2.1用firebug中的XHR分析出所需内容真正的url,再用该url请求需要的内容
2.2对应的url有的很长,可以试着不断裁短,只要内容不变就好
3.截取需要的内容
3.1若返回的是json格式的内容,可以用json.loads(html)将内容转成字典来操作并截取内容
3.2若返回的内容是html格式的内容,可以用beautifulsoup, lxml.etree,re来截取内容
4.应对IP被封的方法
4.1 使用UA伪装成浏览器进行访问
4.2 延长每次爬取的时间间隔
4.3 使用代理IP进行爬取
5.常用的编码与解码方法
相关文章推荐
- python,用django开始第一个网页
- python---格式化字符
- python 全入门手册
- 不要嫌我啰嗦~继续话痨python
- python gui 练习
- 【TypeError: only length-1 arrays can be converted to Python scalars】
- python list 自定义排序
- python 传值与引用问题
- 详解Python中re.sub
- python split函数
- python 实现 Kmeans
- Windows下Python Web开发环境搭建 (Notepad++ & Web.py)
- Python多线程的学习
- python数字、字符串对齐
- Python logging模块详解
- python xlwt写excel格式控制
- 旧文备份:Python国际化支持
- LeetCode----Balanced Binary Tree
- python 的Dict
- python读取xml文件