博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python扫描器-爬虫基础
阅读量:5038 次
发布时间:2019-06-12

本文共 2677 字,大约阅读时间需要 8 分钟。

0x1、基础框架原理

1.1、爬虫基础

爬虫程序主要原理就是模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中

1.1、基础原理

  • 1、发起HTTP请求
  • 2、获取响应内容
  • 3、解析内容
解析html数据    解析json数据    解析二进制数据

4、保存数据(数据库、文件)

1.2、发起HTTP请求-Request

  • 1、HTTP请求方法:
常用的请求方法:GET,POST    其他请求方法:HEAD,PUT,DELETE,OPTHONS
  • 2、请求URL

Web上每种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个通用资源标志符(Universal Resource Identifier, URI)进行定位。

URI通常由三部分组成:

①访问资源的命名机制;        ②存放资源的主机名;        ③资源自身 的名称,由路径表示。

如下面的URI:

http://www.why.com.cn/myhtml/html1223/

我们可以这样解释它:

①这是一个可以通过HTTP协议访问的资源,

②位于主机 www.webmonkey.com.cn上,

③通过路径“/html/html40”访问。

  • 3、请求头
User-agent:请求头中如果没有user-agent客户端配置,服务端可能将你当做一个非法用户    host : 主机头    cookies:cookie用来保存登录信息
  • 4、请求体
get方式,请求体没有内容    post方式,请求体是format data

1.3、获取响应内容-Response

  • 1、响应状态
200:代表成功    301:代表跳转    404:文件不存在    403:权限    502:服务器错误
  • 2、Respone header
set-cookie:告诉浏览器,把cookie保存下来
  • 3、preview就是网页源代码

最主要的部分,包含了请求资源的内容如网页html,图片、二进制数据等

1.4、练手库-Urllib

下载页面

三行代码下载一个页面

import urllib.requestresponse = urllib.request.urlopen('https://www.wikipedia.org')print(response.read())

变量html包含html格式的网页数据。

模拟Web浏览器

Web浏览器把浏览器名称、版本与请求一起发送,这称为用户代理。Python可以使用下面的代码模仿这种方式。User-Agent字符串包含Web浏览器的名称和版本号:

import urllib.request headers = {}headers['User-Agent'] = "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0" req = urllib.request.Request('https://arstechnica.com', headers = headers)html = urllib.request.urlopen(req)print(html.read())

提交数据-GET

与GET请求一起传递的参数是通过附加到URL末尾的查询字符串完成的,因此添加参数不需要任何特殊函数或类,需要做的事情就是确保查询字符串正确编码和格式化。

创建包含在查询字符串中的键值对,可以创建一个字典对象,然后使用urllib.parse模块中包含的urllib的urlencode()函数对该对象进行编码和格式化。

import urllib.request   import urllib.parse      url = "http://example.com"   params = {           "param1": "arg1",           "param2": "arg2",           "param3": "arg3"   }      query_string = urllib.parse.urlencode( params )      url = url + "?" + query_string      with urllib.request.urlopen( url ) as response:            response_text = response.read()            print( response_text )

提交数据-POST

创建一个字典来存储POST参数的键值对,然后使用urlencode()进行格式化。格式化字符串编码为字节并指定所需的字符编码 。然后使用urlopen()正常打开请求,添加数据作为额外的参数,将请求类型更改为POST(默认为GET) ,其中3个参数会附加到请求正文

import urllib.requestimport urllib.parseurl = "http://example.com"params = {    "param1": "arg1",    "param2": "arg2",    "param3": "arg3"}query_string = urllib.parse.urlencode( params )data = query_string.encode("ascii")with urllib.request.urlopen(url,data) as response:    response_text = response.read()    print(response_text)

遇到的问题-SSL需要验证

urllib.error.URLError: 

解决方案

import sslimport urllib.requestcontext = ssl._create_unverified_context()html = urllib.request.urlopen('https://hao123.com/', context=context)print(html.read().decode('utf-8'))

转载于:https://www.cnblogs.com/17bdw/p/10735127.html

你可能感兴趣的文章
pku 3041 Asteroids 二分图匹配——匈牙利算法求最小点覆盖
查看>>
天津赛区总结
查看>>
解决无法正常启动Oracle OEM控制台
查看>>
Flume采集Nginx日志到HDFS
查看>>
205. Isomorphic Strings
查看>>
C++ 类的两种定义方式
查看>>
一些命令和快捷键的全称
查看>>
code style--The Elements Of Programming Style
查看>>
Linux的正则练习
查看>>
团队冲刺02
查看>>
win7 - net 命令
查看>>
Java入门教程四(字符串处理)
查看>>
Windows Phone开发(23):启动器与选择器之CameraCaptureTask和PhotoChooserTask
查看>>
Linux 系统目录结构
查看>>
HealthKit开发教程之HealthKit的主要类型数据
查看>>
weblogic加载hibernate3时,ClassNotFoundException的解决方法
查看>>
我的软件工程之路(三)
查看>>
Nastya Studies Informatics CodeForces - 992B (大整数)
查看>>
Kilani and the Game CodeForces - 1105D (bfs)
查看>>
通过普通用户向各个节点服务器分发文件到各个目录
查看>>