网络爬虫入门到应用
2019-07-19 17:30
1341 查看
文章目录
- 一. 爬虫基本原理概述
- 1. 爬虫基本流程
- 2. Request与Response
- 3. Request
- 4. Response
- 5. 抓取的数据类型
- 6. 解析方式
- 7. JavaScript渲染问题
- 8. 数据的保存
一. 爬虫基本原理概述
1. 爬虫基本流程- 发起请求
通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。 - 获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。 - 解析内容
得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。 - 保存数据
保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
浏览器发送消息给该网址所在的服务器,这个过程叫做HTTP Request。服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。 浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。
3. Request- 请求方式
主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。 - 请求URL
URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一来确定。 - 请求头
包含请求时的头部信息,如User-Agent、Host、Cookies等信息。 - 请求体
请求时额外携带的数据,如表单提交时的表单数据
- 响应状态
有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误 - 响应头
如内容类型、内容长度、服务器信息、设置Cookie等等 - 响应体
最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等
- 网页文本
如HTML文档、Json格式文本等 - 图片
获取到的是二进制文件,保存为图片格式 - 视频
同为二进制文件,保存为视频格式即可 - 其他数据
只要是能请求到的,一般都能获取
- 直接处理
- Json解析
- 正则表达式
- BeautifulSoup
- PyQuery
- Path
- 分析Ajax请求
- Selenium/WebDriver
- Splash
- PyV8
- Ghost
- 文本
纯文本、Json、Xml等…… - 关系型数据库
如MySQL、Oracle、SQL Server等具有结构化表结构形式存储 - 非关系型数据库
如MongoDB、Redis等Key-Value形式存储 - 二进制文件
如图片、视频、音频等等直接保存成特定格式即可
二. 爬虫之登录github
1. 向Github登录页面发送get请求获取csrf_tokenimport requests from bs4 import BeautifulSoup # request login page to get csrfequest resp = requests.get('https://github.com/login') login_bs = BeautifulSoup(resp.text, 'html.parser') token = login_bs.find(name='input', attrs={'name': 'authenticity_token'}).get('value') get_cookies_dict = resp.cookies.get_dict() # get cookies print(token)
2. 发送post请求登录Github获取cookies
获取登录需要带的参数,
import requests from bs4 import BeautifulSoup # request login page to get csrfequest resp = requests.get('https://github.com/login') login_bs = BeautifulSoup(resp.text, 'html.parser') token = login_bs.find(name='input', attrs={'name': 'authenticity_token'}).get('value') get_cookies_dict = resp.cookies.get_dict() # get cookies # login github with cookies and other parameters,remember save cookies resp2 = requests.post( 'https://github.com/session', data={ 'utf8': '✓', 'authenticity_token': token, 'login': 'username',#your username 'password': 'password',#your password 'webauthn-support': 'unknown', 'commit': 'Sign in', }, cookies=get_cookies_dict ) post_cookie_dict = resp2.cookies.get_dict() # print(get_cookies_dict) # print(post_cookie_dict) cookies_dict = {} cookies_dict.update(get_cookies_dict) cookies_dict.update(post_cookie_dict) print(cookies_dict)
3. 带着cookies访问页面并获取内容
import requests from bs4 import BeautifulSoup # request login page to get csrfequest resp = requests.get('https://github.com/login') login_bs = BeautifulSoup(resp.text, 'html.parser') token = login_bs.find(name='input', attrs={'name': 'authenticity_token'}).get('value') get_cookies_dict = resp.cookies.get_dict() # get cookies # login github with cookies and other parameters,remember save cookies resp2 = requests.post( 'https://github.com/session', data={ 'utf8': '✓', 'authenticity_token': token, 'login': 'username',#your username 'password': 'password',#your password 'webauthn-support': 'unknown', 'commit': 'Sign in', }, cookies=get_cookies_dict ) post_cookie_dict = resp2.cookies.get_dict() # print(get_cookies_dict) # print(post_cookie_dict) cookies_dict = {} cookies_dict.update(get_cookies_dict) cookies_dict.update(post_cookie_dict) # request primary page request_url = 'https://github.com/settings/profile' resp3 = requests.get(url=request_url, cookies=cookies_dict) print(resp3.text)
三. requests模块详解
四. bs4模块简述
五. 轮询
六. 长轮询
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
一.
相关文章推荐
- JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)
- 消息队列入门(三)ActiveMQ的应用实例
- 区块链入门与去中心化应用实战
- DBus 入门与应用 -- DBus 的 C 编程接口
- iOS 应用开发入门指南,中文教程
- jHipster 3.4 创建最流行Java Web应用项目最简单的入门基本教程
- DWR入门与应用(一)
- Smarty模板引擎之简单入门应用
- 神器! 线性变换线段树 —— 线段树入门及应用
- Node.js入门到企业Web开发中的应用
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- ZooKeeper入门笔记---架构以及应用介绍
- Java乔晓松-Hibernate原理与应用入门
- go语言快速入门:BootStrap应用(16)
- Pylons 入门实例教程 – 发布应用
- [收藏] 正则表达式的入门与应用,1~4篇!grep/sed/perl/awk
- son入门(2) json在服务器端的应用
- Tomcat 7 快速入门及应用
- 比特币入门之使用PRC应用开发接口
- 电脑应用118招,看完你就入门了