【爬虫】(一):爬网页、爬图片、自动登录

date: 2016-12-12 18:49:28

一、HTTP协议

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。
用于从WWW服务器传输超文本到本地浏览器的传送协议。

HTTP的请求响应模型

客户端发起请求,服务器回送响应。

这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

  1. 客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
  2. 建立连接后,客户机发送一个请求给服务器。
  3. 服务器接到请求后,给予相应的响应信息。
  4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

请求报头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

响应报头

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

二、Python3.X爬虫编程

1、简单的爬虫

python3.X
一个简单的示例爬虫

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())  


2、伪装成浏览器来爬网页

有些网页,比如登录的。如果你不是从浏览器发起的起求,这就不会给你响应,这时我们就需要自己来写报头。然后再发给网页的服务器,这时它就以为你就是一个正常的浏览器。从而就可以爬了!

python3.4   
一个简单的示例爬虫  
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())    

来看看请求报头,就是和我们设置的一个样。
返回的HTML是一样的。

3、爬取网站上的图片

前面我们可以爬网页了,下一步我们就可以批量的自动下载该网页上的各种数据了,比如,下载该网页上的所有图片。

python3.x 爬虫教程  
爬取网站上的图片  
import urllib.request    
import socket    
import re    
import sys    
import os    
targetDir = r"E:\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 = "https://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'(https:[^\s]*?(jpg|png|gif))', str(contentBytes))):  #正则表达式查找所有的图片  
        print(link)  
        try:   
            urllib.request.urlretrieve(link, destFile(link)) #下载图片  
        except:  
            print('失败') #异常抛出  

4、模拟登陆西电研究生教务处


 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
import requests
url = 'http://jwxt.xidian.edu.cn/caslogin.jsp' #login网址

id = '1601120338'
password = '113411'
lt_value = 'LT-31860-Nr4DeRHVPUcMaNqcVrB5XxzLecI0ev1481623540759-wHmD-cas'
exe_value = 'e1s1'

datas = {'username': id, 'password': password,
          "submit": "", "lt": lt_value, "execution": exe_value,
          "_eventId": "submit", "rmShown": '1'
          }

headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
           'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
           # "Host": "ids.xidian.edu.cn",
           "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
           "Accept-Encoding": "gzip, deflate",
           "Referer": "http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp",
           # 'X-Requested-With': "XMLHttpRequest",
           "Content-Type": "application/x-www-form-urlencoded"
           }
sessions = requests.session()
response = sessions.post(url, headers=headers, data=datas)
print(response.status_code)

返回的状态码为200.
这里用到了Requests模块,还不会使用的可以查看中文文档 ,它给自己的定义是:HTTP for Humans,因为简单易用易上手,我们只需要传入Url地址,构造请求头,传入post方法需要的数据,就可以模拟浏览器登陆了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,833评论 19 139
  • Web测试基础 I. 如何开展Web测试 Web测试的对象 Web的页面元素 Web的业务逻辑 Web的数据行为 ...
    厲铆兄阅读 4,471评论 4 62
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,774评论 6 152
  • 蚊子发现,最近和男朋友聊天,每次都是自己主动找话题,而男朋友很少主动找自己聊天。蚊子觉得有点累,刚谈恋爱的时候,男...
    齐眉婚姻阅读 3,576评论 1 5
  • 一场繁华即将开始 这个冬难道真的就这样过去了么?一场雪也不给下。 也许,还有机会,老天爷是个任性的老人,在不合时宜...
    望秋实阅读 311评论 0 1

友情链接更多精彩内容