Python3.4爬虫编程
2016-02-03 18:31
926 查看
感谢@林炳文Evankaka
转载于http://blog.csdn.net/evankaka
这是爬回来的网页输出:
这中间到底发生了什么事呢?让我们打开Fiddler来看看吧:
左边标红的就表示我们本次访问成功,为http 200
右边上方这是python生成 的请求报头,不清楚看下面:
这里响应回来的就是我们上面在python的idle中打印出来的网页了!
来看看请求报头,就是和我们设置的一个样。
返回的是一样的:
再来一个复杂一点的请求报头:
看看生成 的结果:
返回还是:
这是正在运行的过程:
打开电脑上对应的文件夹,然后来看看图片,这里只是一部分哦
真实的网页上的图片
比如:
然后看看D盘:
用NotePad打开:
普通情况下我们输入邮箱和密码后,登录。来看看。这就是提交表单的内容
python3.4代码编写:
来看看结果:
这时运行返回的
发送出去的请求头
返回的数据是什么意思呢:
很简单, 我们转码下:
转载于http://blog.csdn.net/evankaka
一、第一个示例,我们要来进行简单的爬虫来爬别人的网页
#python3.4 爬虫教程 #一个简单的示例爬虫 #林炳文Evankaka(博客:http://blog.csdn.net/evankaka/) import urllib.request url = "http://www.douban.com/" webPage=urllib.request.urlopen(url) data = webPage.read() data = data.decode('UTF-8') print(data) print(type(webPage)) print(webPage.geturl()) print(webPage.info()) print(webPage.getcode())
这是爬回来的网页输出:
这中间到底发生了什么事呢?让我们打开Fiddler来看看吧:
左边标红的就表示我们本次访问成功,为http 200
右边上方这是python生成 的请求报头,不清楚看下面:
这里响应回来的就是我们上面在python的idle中打印出来的网页了!
二、伪装成浏览器来爬网页
有些网页,比如登录的。如果你不是从浏览器发起的起求,这就不会给你响应,这时我们就需要自己来写报头。然后再发给网页的服务器,这时它就以为你就是一个正常的浏览器。从而就可以爬了!#python3.4 爬虫教程 #一个简单的示例爬虫 #林炳文Evankaka(博客:http://blog.csdn.net/evankaka/) import urllib.request weburl = "http://www.douban.com/" webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} req = urllib.request.Request(url=weburl, headers=webheader) webPage=urllib.request.urlopen(req) data = webPage.read() data = data.decode('UTF-8') print(data) print(type(webPage)) print(webPage.geturl()) print(webPage.info()) print(webPage.getcode())
来看看请求报头,就是和我们设置的一个样。
返回的是一样的:
再来一个复杂一点的请求报头:
#python3.4 爬虫教程 #一个简单的示例爬虫 #林炳文Evankaka(博客:http://blog.csdn.net/evankaka/) import urllib.request weburl = "http://www.douban.com/" webheader1 = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} webheader2 = { 'Connection': 'Keep-Alive', 'Accept': 'text/html, application/xhtml+xml, */*', 'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko', #'Accept-Encoding': 'gzip, deflate', 'Host': 'www.douban.com', 'DNT': '1' } req = urllib.request.Request(url=weburl, headers=webheader2) webPage=urllib.request.urlopen(req) data = webPage.read() data = data.decode('UTF-8') print(data) print(type(webPage)) print(webPage.geturl()) print(webPage.info()) print(webPage.getcode())
看看生成 的结果:
返回还是:
3、爬取网站上的图片
前面我们可以爬网页了,下一步我们就可以批量的自动下载该网页上的各种数据了~,比如,这里我要下载该网页上的所有图片#python3.4 爬虫教程 #爬取网站上的图片 #林炳文Evankaka(博客:http://blog.csdn.net/evankaka/) import urllib.request import socket import re import sys import os targetDir = r"D:\PythonWorkPlace\load" #文件保存路径 def destFile(path): if not os.path.isdir(targetDir): os.mkdir(targetDir) pos = path.rindex('/') t = os.path.join(targetDir, path[pos+1:]) return t if __name__ == "__main__": #程序运行入口 weburl = "http://www.douban.com/" webheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} req = urllib.request.Request(url=weburl, headers=webheaders) #构造请求报头 webpage = urllib.request.urlopen(req) #发送请求报头 contentBytes = webpage.read() for link, t in set(re.findall(r'(http:[^\s]*?(jpg|png|gif))', str(contentBytes))): #正则表达式查找所有的图片 print(link) try: urllib.request.urlretrieve(link, destFile(link)) #下载图片 except: print('失败') #异常抛出
这是正在运行的过程:
打开电脑上对应的文件夹,然后来看看图片,这里只是一部分哦
真实的网页上的图片
4、保存爬取回来的报文
def saveFile(data): save_path = 'D:\\temp.out' f_obj = open(save_path, 'wb') # wb 表示打开方式 f_obj.write(data) f_obj.close() # 这里省略爬虫代码 # ... # 爬到的数据放到 dat 变量里 # 将 dat 变量保存到 D 盘下 saveFile(dat)
比如:
#python3.4 爬虫教程 #一个简单的示例爬虫 #林炳文Evankaka(博客:http://blog.csdn.net/evankaka/) import urllib.request def saveFile(data): save_path = 'D:\\temp.out' f_obj = open(save_p bc1c ath, 'wb') # wb 表示打开方式 f_obj.write(data) f_obj.close() weburl = "http://www.douban.com/" webheader1 = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} webheader2 = { 'Connection': 'Keep-Alive', 'Accept': 'text/html, application/xhtml+xml, */*', 'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko', #'Accept-Encoding': 'gzip, deflate', 'Host': 'www.douban.com', 'DNT': '1' } req = urllib.request.Request(url=weburl, headers=webheader2) webPage=urllib.request.urlopen(req) data = webPage.read() saveFile(data)# 将data变量保存到 D 盘下 data = data.decode('UTF-8') print(data) print(type(webPage)) print(webPage.geturl()) print(webPage.info()) print(webPage.getcode())
然后看看D盘:
用NotePad打开:
三、Python3.x 自动登录
普通情况下我们输入邮箱和密码后,登录。来看看。这就是提交表单的内容
python3.4代码编写:
import gzip import re import http.cookiejar import urllib.request import urllib.parse #解压函数 def ungzip(data): try: # 尝试解压 print('正在解压.....') data = gzip.decompress(data) print('解压完毕!') except: print('未经压缩, 无需解压') return data #获取_xsrf def getXSRF(data): cer = re.compile('name=\"_xsrf\" value=\"(.*)\"', flags = 0) strlist = cer.findall(data) return strlist[0] #构造文件头 def getOpener(head): #设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie cj = http.cookiejar.CookieJar() pro = urllib.request.HTTPCookieProcessor(cj) opener = urllib.request.build_opener(pro) header = [] for key, value in head.items(): elem = (key, value) header.append(elem) opener.addheaders = header return opener #构造header,一般header至少要包含一下两项。这两项是从抓到的包里分析得出的。 header = { 'Connection': 'Keep-Alive', 'Accept': 'text/html, application/xhtml+xml, */*', 'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko', 'Accept-Encoding': 'gzip, deflate', 'Host': 'www.zhihu.com', 'DNT': '1' } url = 'http://www.zhihu.com/' opener = getOpener(header) op = opener.open(url) data = op.read() data = ungzip(data) # 解压 _xsrf = getXSRF(data.decode()) #post数据接收和处理的页面(我们要向这个页面发送我们构造的Post数据) url += 'login/email' id = '这里写自己的邮箱' password = '这里写自己的密码' #构造Post数据,他也是从抓大的包里分析得出的。 postDict = { '_xsrf':_xsrf, #特有数据,不同网站可能不同 'email': id, 'password': password, 'rememberme': 'y' } #需要给Post数据编码 postData = urllib.parse.urlencode(postDict).encode() op = opener.open(url, postData) data = op.read() data = ungzip(data) print(data.decode())
来看看结果:
这时运行返回的
发送出去的请求头
返回的数据是什么意思呢:
很简单, 我们转码下:
相关文章推荐
- java-用HttpURLConnection发送Http请求.
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- 爬虫笔记
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- Python实现CART(基尼指数)