7.爬虫基本原理

上一篇:6.Python爬虫常用库的安装
下一篇:8.Urllib库基本使用

一、什么是爬虫

   简单理解为:请求网站并提取数据的自动化程序
   请求:浏览器请求服务器获取网络资源,HTML文本
   提取:从HTML文本中提取需要的信息(手机号等)存入数据库
   自动化:程序可以不停循环爬取信息

二、工作原理(示例)

   打开百度新闻,浏览器检查(右击一般会有)
   Elements就是网页源代码,要提取的信息就在这里面。

三、基本流程

  1. 发起请求。通过HTTP库向目标站点发起请求,即发送一个Request。请求可以包含额外的headers等信息,等待服务器响应。
  2. 获取响应内容。如果服务器正常响应,会得到一个Response,Response的内容就是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(图片视频)等类型。
  3. 解析网页内容。得到的内容可能是:HTML--可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以保存或者进一步处理。
  4. 保存数据。保存形式多样,可以保存为文本,也可以保存至数据库,或者保持特定格式(图片等)的文件。
Request和Response
  1. 浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。
  2. 服务器收到浏览器发送的信息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response.
  3. 浏览器接收到服务器的Response信息后,会对信息进行相应处理,然后展示。
  • Request:
  1. 请求方式,主要是GET、POST两种。
    1.1 GET:请求参数直接显示,不安全。输入url可以直接访问。
    1.2 POST:多了Form Data,更安全,链接没有参数,在Form Data中。
  2. 请求URL:URL全称 统一资源定位符,如一个文档、一张图片、一个视频等都可以用URL(链接)唯一来确定。
  3. 请求头:Headers--包含请求时的头部信息,如User-Agent、Host、Cookies等信息。浏览器识别,决定是否给你发送响应。
  4. 请求体:请求时,额外携带的数据,如表单提交时的表单数据。(post才有)
  • Response:
  1. 响应状态---Status Code:
    1.1 200:成功。
    1.2 301:跳转。
    1.3 404:找不到页面。
    1.4.502:服务器处理错误。
  2. 响应头,如内容类型,内容长度,服务器信息,设置Cookie等
  3. 响应体(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()
  1. 视频同图片,还有其他能请求到的都可以
  • 解析方式
  1. 直接处理,字符串简单去除首尾的空格
  2. Json,网站通过ajax加载的,返回的是Json格式的字符串,解析成字符串对象
  3. 正则表达式
  4. BeautifulSoup
  5. PyQuery
  6. 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库基本使用

你可能感兴趣的:(7.爬虫基本原理)