Python扫描器-爬虫基础
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.request
response = 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.request
import urllib.parse
url = "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: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'hao123.com'. (_ssl.c:1051)>
解决方案
import ssl
import urllib.request
context = ssl._create_unverified_context()
html = urllib.request.urlopen('https://hao123.com/', context=context)
print(html.read().decode('utf-8'))
Python扫描器-爬虫基础的更多相关文章
- python从爬虫基础到爬取网络小说实例
一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...
- Python BeautifulSoup4 爬虫基础、多线程学习
针对 崔庆才老师 的 https://ssr1.scrape.center 的爬虫基础练习.Threading多线程库.Time库.json库.BeautifulSoup4 爬虫库.py基本语法
- 自学Python六 爬虫基础必不可少的正则
要想做爬虫,不可避免的要用到正则表达式,如果是简单的字符串处理,类似于split,substring等等就足够了,可是涉及到比较复杂的匹配,当然是正则的天下,不过正则好像好烦人的样子,那么如何做呢,熟 ...
- Python归纳 | 爬虫基础知识
1. urllib模块库 Urllib是python内置的HTTP请求库,urllib标准库一共包含以下子包: urllib.error 由urllib.request引发的异常类 urllib.pa ...
- 自学Python四 爬虫基础知识储备
首先,推荐两个关于python爬虫不错的博客:Python爬虫入门教程专栏 和 Python爬虫学习系列教程 .写的都非常不错,我学习到了很多东西!在此,我就我看到的学到的进行总结一下! 爬虫就是 ...
- 自学Python五 爬虫基础练习之SmartQQ协议
BAT站在中国互联网的顶端,引导着中国互联网的发展走向...既受到了多数程序员的关注,也在被我们所惦记着... 关于SmartQQ的协议来自HexBlog,根据他的博客我自己也一步一步的去分析,去尝试 ...
- python 网页爬虫 基础篇
首先要连接自己的数据库 import pymysql import requests #需要导入模块 db = pymysql.connect('localhost', 'root', '****** ...
- Python爬虫基础
前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...
- python 3.x 爬虫基础---Urllib详解
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...
随机推荐
- Java&Selenium数据驱动【DataProvider+TestNG+Mysql】
Java&Selenium数据驱动[DataProvider+TestNG+Mysql] package testNGWithDataDriven; import java.io.IOExce ...
- 《图解HTTP》笔记1
Web 是建立在 HTTP 协议上通信的. HTTP 通常被译为超文本传输协议,但这种译法并不严谨.严谨的译名应该为“超文本转移协议”. 通过发送请求获取服务器资源的 Web 浏览器等,都可称为客户端 ...
- ip_srcroute函数
当响应某个分组时,I C M P和标准的运输层协议必须把分组带的任意源路由逆转.逆转源路由是通过i p _ s r c r o u t e保存的路由构造的. 7 7 7 - 7 8 3 i p _ s ...
- maven 安装第三方jar到本地 出现 The goal you specified requires a project to execute but there is no POM in this directory 错误
原因是因为操作系统的差异导致,把所有参数加上引号即可. 如下所示: mvn install:install-file "-Dfile=cobra.jar" "-Dgrou ...
- 可嵌入的脚本引擎 Jx9
Jx9是一个可嵌入的脚本引擎,基于JSON实现了图灵完备(Turing complete)的编程语言. Jx9 是那些需要流行和高效率脚本支持应用程序(比如:游戏.数据库系统,文本编辑器,网络应用程序 ...
- 25、自动装配-@Profile根据环境注册bean
25.自动装配-@Profile根据环境注册bean 指定组件在哪个环境的情况下才能被注册到容器中 加了环境标识的,只有这个环境被激活才能注册到组件中 默认是default环境 写在类上,整个配置类的 ...
- 5、Spring Boot 2.x 启动原理解析
1.5 Spring Boot 启动原理解析 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏 ...
- 数据库读写分离、分表分库——用Mycat
转: https://www.cnblogs.com/joylee/p/7513038.html 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据 ...
- 安装YII
吸收了其它php网站的搭建经验,没想到安装yii的时候还是状况频出 yii2 安装 http://www.yiichina.com/tutorial/324 1.下载了个yii2 advance的版本 ...
- 【概率论】3-3:累积分布函数(Cumulative Distribution Function)
title: [概率论]3-3:累积分布函数(Cumulative Distribution Function) categories: Mathematic Probability keywords ...