爬虫
时间:2019-09-26
本文章向大家介绍爬虫,主要包括爬虫使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
爬虫:请求网站并爬取数据的自动化程序。
基本流程:
- 发起请求:通过 HTTP 库向目标站点发情请求,即发送一个 Request ,请求可包含而外的 headers 等信息,等待服务器的响应;
- 获取响应内容:如服务器能正常响应,会得到一个 Response ,Response 的内容便是想要获取的页面内容,类型可能有 HTML、JSON 字符串、二进制数据(如图片视频等类型);
- 解析内容:得到的内容是 HTML,可用正则表达式、网页解析库进行解析;得到 JSON 可直接我转为 JSON 对象解析;得到二进制可做保存或进一步处理;
- 保存数据:保存形式多样,可存为文本,保存至数据库,或存为特定格式的文件。
Request:
- 请求方式:主要有 Get 、Post 两种类型,还有 HEAD、PUT、DELETE、OPTIONS 等;
- 请求 URL:全称 统一资源定位符,如一个网页文档,一张图片,一个视频等都可用 URL 唯一来确定;
- 请求头:包含请求时的头部信息,如 User-Agent、Host、Cookies 等;
- 请求体:请求时而外携带的数据,如表单提交的表单数据。
Response:
- 响应状态:有多种响应状态,如200代表成功,301代表跳转,404找不到页面,502服务器错误;
- 响应头:如内容类型,内容长度服务器信息,设置Cookie 等;
- 响应体:最只要的部分,包含了请求资源的内容,如网页 HTML,图片二进制数据等。
解析方式:
- 直接处理;
- json 解析;
- 正则表达式;
- BeautifulSoup;
- pyQuery;
- Xpath。
Urllib:python 内置的 HTTP 请求库
import request response = urllib.request.urlopen('http://www.baidu.com')
- urllib.request:请求模块;
- urllib.error:异常处理模块;
- urllib.parse:url 解析模块;
- urllib.robotparser:robots.txt 解析模块。
1 import urllib.parse 2 import urllib.request 3 import urllib.error 4 import socket 5 6 data = bytes(urllib.parse.urlencode({'word':'hello'}),encoding='utf8') 7 try: 8 # response = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1) 9 response = urllib.request.urlopen('http://httpbin.org/post', data=data, timeout=1) 10 print(response.read().decode('utf-8')) 11 except urllib.error.URLError as e: 12 if isinstance(e.reason, socket.timeout): 13 print('TIME OUT')
后期再整理......
原文地址:https://www.cnblogs.com/liqiongming/p/11588865.html
- 学习SpringMVC——从HelloWorld开始
- 小程序年底重磅更新,小游戏上线,最强入口也来了!
- 学习SpringMVC——如何获取请求参数
- 谈谈关于MVP模式中V-P交互问题
- 学习Spring——两个你熟悉的不能再熟悉的场景使用
- 学习Spring——依赖注入
- 机会真的多吗?
- 浅析Hadoop大数据分析与应用
- WCF技术剖析之三十三:你是否了解WCF事务框架体系内部的工作机制?[上篇]
- Java豆瓣电影爬虫——小爬虫成长记(附源码)
- Java豆瓣电影爬虫——抓取电影详情和电影短评数据
- 日本科技振兴理事:AI科学家应有红线意识
- Java豆瓣电影爬虫——使用Word2Vec分析电影短评数据
- 实践重于理论——创建一个监控程序探测WCF的并发处理机制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Pod Terminating原因追踪系列之三】让docker事件处理罢工的cancel状态码
- C(string.h)字符串操作函数总结
- 指针与数组
- C语言字符串指针
- Http:GET和POST请求的区别
- 十六进制数组转换成ASCII码
- 解决ModuleNotFoundError: No module named ‘pip’问题
- 【FreeRTos】队列管理1
- 【FreeRTOS】队列管理2
- ubuntu——Zbar 在linux/ubuntu下的安装编译
- ZBAR库
- 英文文本关系抽取(fine-tune Huggingface XLNet)
- Laravel 7.x 使用 keyspace notification 监听不到 Key 过期事件
- 嵌入式链接脚本(LINK SCRIPT)介绍
- zbar中的zbar_scan_image 函数