前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【爬虫】(一):爬网页、爬图片、自动登录

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

作者头像
一点儿也不潇洒
发布2018-08-07 10:12:34
7170
发布2018-08-07 10:12:34
举报
文章被收录于专栏:肖洒的博客肖洒的博客

一、HTTP协议

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

HTTP的请求响应模型

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

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

工作流程

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

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

请求报头

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

响应报头

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

二、Python3.X爬虫编程

1、简单的爬虫

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

代码语言:javascript
复制
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、伪装成浏览器来爬网页 有些网页,比如登录的。如果你不是从浏览器发起的起求,这就不会给你响应,这时我们就需要自己来写报头。然后再发给网页的服务器,这时它就以为你就是一个正常的浏览器。从而就可以爬了!

代码语言:javascript
复制
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、爬取网站上的图片

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

代码语言:javascript
复制
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、模拟登陆西电研究生教务处

代码语言:javascript
复制

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

id = '学号'
password = '密码'
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方法需要的数据,就可以模拟浏览器登陆了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、HTTP协议
    • HTTP的请求响应模型
      • 工作流程
        • 请求报头
          • 响应报头
          • 二、Python3.X爬虫编程
            • 1、简单的爬虫
              • 3、爬取网站上的图片
                • 4、模拟登陆西电研究生教务处
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档