欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬虫入门笔记

程序员文章站 2024-02-19 18:37:22
...

什么是爬虫?

请求网络并提取数据的自动化程序

爬虫的基本流程

sequenceDiagram
发起请求->>获取响应内容:
获取响应内容->>解析内容:
解析内容->>保存数据:

什么是Request和Response?

  1. 浏览器就发送消息给该网址所在的的服务器,这个过程就叫做HTTP Request。
  2. 服务器收到浏览器发送的消息后,能根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫HTTP Response。
  3. 浏览器收到服务器的Response信息后,会对信息进行处理,然后展示。

Request中包含什么?

  1. 请求方式
    主要有GET,POST两种类型
  2. 请求URL
    URL全称统一资源定位符,如一个网页文档,一张图片,一个视频等都可以用URL来确定
  3. 请求头
    包含请求时的头部信息。如Uesr-Agent,Host,Cookies等信息
  4. 请求体
    请求时额外携带的数据,如表单提交时的表单数据

Response中包含什么?

  1. 响应状态
    有多种响应状态,如200代表成功,301跳转,404找不到页面,502服务器错误
  2. 响应头
    如内容类型,内容长度,服务器信息,设置Cookies等等
  3. 响应体
    最主要的部分,包含请求资源的内容,如网页HTML,图片二进制数据等

能抓怎样的数据?

  1. 网页文本
  2. 图片
  3. 视频
  4. 其他

怎样来解析?

  1. 直接处理
  2. Json解析
  3. 正则表达式
  4. BeautifulSoup
  5. PyQuery
  6. XPath

怎样解决JavaScript渲染的问题?

  1. 分析Ajax请求
  2. Selenium/WebDriver
  3. Splash
  4. Pyv8,Ghost.py

怎样保持数据?

  1. 文本
  2. 关系型数据库
  3. 非关系型数据库
  4. 二进制文件

什么是Urllib?

  1. Python内置的HTTP请求
  2. urllib.request 请求模块
  3. urllib.error 异常处理模块
  4. urllib.parse URL解析模块
  5. urllib.robotparser robots.txt解析模块

Urllib的常用用法

import urllib.request
response=urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))
#请求用法实例

import urllib.parse
import urllib.request
data=bytes(urllib.parse.urlencode({'world':'hello'}),encoding='utf8')
response=urllib.request.urlopen('http://httpbin.org/post',data=data)
print(response.read())
#http://httpbin.org/post是一个测试网站
#解析用法实例

import urllib.request
response=urllib.request.urlopen('http://httpbin.org/get',timeout=1)
print(response.read())
#超时警告实例


什么是Request?
Request使用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库。

安装
Pip3 install request

什么是正则表达式?
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一种特定字符,及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
并非python独有,re模块实现。

常用正则表达
tool.oschina.net/regex/#

re.match

re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

re.match(pattern,string,flag=0)

re.search

re.search扫描整个字符串并返回第一个成功的匹配

re.findall

搜索字符串,以列表形式返回全部匹配的子串

re.sub

替换字符串中每一个匹配的子串后返回替换后的字符串

re.compile

将正则表达式编译成正则表达式对象

练手

import requests
import re
content=requests.get('https://book.douban.com/').text
#一定要加text
pattern=re.compile('<li.*?cover.*?href="(.*?)".*?title="(.*?)".*?more-meta.?author">(.*?).*?year">(.*?)</span>.*?</li>',re.S)
results=re.findall(pattern,content)
#此处非常卡,非常慢
for result in results:
   url,name,author,date=result
   print(url,name,author,date,strip())

BeautifulSoup

灵活又方便的网页解析库,处理高效,支持多种解析器,利用它不用编写正则表达式即可方便地实现网页的提取。

安装BeautifulSoup

pip3 install beautifulsoup4

标签选择器

标准选择器

find_all(name,attrs,recursive,text,**kwargs)
find(name,attrs,recursive,text,**kwargs)
find_parents()
find_parent()
find_next_sibilings()
find_next_sibiling()

CSS选择器

PyQuery

强大又灵活的网页解析库

安装PyQuery

pip3 install pyquery

初始化

  1. 字符串初始化
  2. URL初始化
  3. 文件初始化

Selenium

自动化测试工具,支持多种浏览器。
爬虫中主要用来解决JavaScript渲染的问题

安装Selenium

pip3 install selenium

相关标签: python 爬虫