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

最新文章

  1. Hbase1.0 客户端api
  2. Dede cms文章内容管理系统安全漏洞!如何有效防止DEDE织梦系统被挂木马安全设置
  3. iOS图片压缩
  4. C#Graphics画图
  5. Load PE from memory(反取证)(未完)
  6. 用Chrome开发者工具做JavaScript性能分析
  7. 网格视图(GridView)功能和用法
  8. 【转载】doxygen+graphviz生成代码文档
  9. 通过grub-install命令把grub安装到u盘
  10. PHP Array 简介
  11. unity插件各领域王者
  12. 开源CMS系统Moodle对比中国本土化开源在线教育平台EduSoho
  13. JMeter实现Oracle参数化(1)
  14. 【题解】Luogu P3287 [SCOI2014]方伯伯的玉米田
  15. 前端学习 之 Bootstrap (一)
  16. 【java】一维数组
  17. 《linux内核》课本第五章读书笔记
  18. SPSS-两变量相关性分析
  19. Swing教程
  20. 【图解】javaScript组成结构

热门文章

  1. 前端笔记-css
  2. JDK源码那些事儿之HashMap.TreeNode
  3. asp.net core 读取appsettings.json配置项
  4. BZOJ 4864: [BeiJing 2017 Wc]神秘物质 (块状链表/平衡树 )
  5. .Net Core:Middleware自定义中间件
  6. Vue中用props给data赋初始值遇到的问题解决
  7. wamp大文件上传
  8. [Luogu] 软件包管理器
  9. [Luogu] 遥远的国度
  10. LOJ2341. 「WC2018」即时战略 [动态点分治]