上一篇:6.Python爬虫常用库的安装
下一篇:8.Urllib库基本使用
一、什么是爬虫
简单理解为:请求网站并提取数据的自动化程序
请求:浏览器请求服务器获取网络资源,HTML文本
提取:从HTML文本中提取需要的信息(手机号等)存入数据库
自动化:程序可以不停循环爬取信息
二、工作原理(示例)
打开百度新闻,浏览器检查(右击一般会有)
Elements就是网页源代码,要提取的信息就在这里面。
三、基本流程
- 发起请求。通过HTTP库向目标站点发起请求,即发送一个Request。请求可以包含额外的headers等信息,等待服务器响应。
- 获取响应内容。如果服务器正常响应,会得到一个Response,Response的内容就是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(图片视频)等类型。
- 解析网页内容。得到的内容可能是:HTML--可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以保存或者进一步处理。
- 保存数据。保存形式多样,可以保存为文本,也可以保存至数据库,或者保持特定格式(图片等)的文件。
Request和Response
- 浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。
- 服务器收到浏览器发送的信息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response.
- 浏览器接收到服务器的Response信息后,会对信息进行相应处理,然后展示。
- Request:
- 请求方式,主要是GET、POST两种。
1.1 GET:请求参数直接显示,不安全。输入url可以直接访问。
1.2 POST:多了Form Data,更安全,链接没有参数,在Form Data中。 - 请求URL:URL全称 统一资源定位符,如一个文档、一张图片、一个视频等都可以用URL(链接)唯一来确定。
- 请求头:Headers--包含请求时的头部信息,如User-Agent、Host、Cookies等信息。浏览器识别,决定是否给你发送响应。
- 请求体:请求时,额外携带的数据,如表单提交时的表单数据。(post才有)
- Response:
- 响应状态---Status Code:
1.1 200:成功。
1.2 301:跳转。
1.3 404:找不到页面。
1.4.502:服务器处理错误。 - 响应头,如内容类型,内容长度,服务器信息,设置Cookie等
- 响应体(form-data):最重要的部分,包含了请求资源的内容,如网页HTML,图片,二进制数据等。
示例:
import requests
#示例
response = requests.get("http://www.baidu.com")
print(response.text) #网页源代码
print(response.status_code) #响应码 200
print(response.headers) #是键值对模式
- 爬虫抓取怎样的数据
1.网页文本:HTML文档,Json格式文本等
2.图片:抓取到的是二进制文件,保存为图片格式
import requests
# 抓取一个图片
response = requests.get("http://e.hiphotos.baidu.com/image/h%3D300/sign=25b08adadd1373f0ea3f699f940e4b8b/0bd162d9f2d3572ce52c8e7d8613632763d0c341.jpg")
print(response.content) #输出二进制
# 文件写入---执行完毕后,在同级目录会下载改图片
with open("D:\\1.jpg","wb") as f:
f.write(response.content)
f.close()
- 视频同图片,还有其他能请求到的都可以
- 解析方式
- 直接处理,字符串简单去除首尾的空格
- Json,网站通过ajax加载的,返回的是Json格式的字符串,解析成字符串对象
- 正则表达式
- BeautifulSoup
- PyQuery
- XPath
有时候看到的内容和抓取的代码不一致
是因为JavaScript渲染的问题
怎样解决JavaScript渲染的问题?
1、分析Ajax请求
2、Seleinum/WebDriver(自动化测试)
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://taobao.com")
print(driver.page_source) #不用担心js渲染的问题
3、Splash
4、PyV8、Ghost.py
怎样保存数据
1、文本:纯文本、Json、Xml等。
2、关系型数据库:MySql、Oracle、Sqlserver等具有结构化表结构形式存储。
3、非关系型数据库:如MongoDB、Redis字典型键值对形式存储。
4、二进制文件:如图片、视频、音频等直接保存特定格式即可。
上一篇:6.Python爬虫常用库的安装
下一篇:8.Urllib库基本使用