Python爬虫入门笔记
什么是爬虫?
请求网络并提取数据的自动化程序
爬虫的基本流程
sequenceDiagram
发起请求->>获取响应内容:
获取响应内容->>解析内容:
解析内容->>保存数据:
什么是Request和Response?
- 浏览器就发送消息给该网址所在的的服务器,这个过程就叫做HTTP Request。
- 服务器收到浏览器发送的消息后,能根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫HTTP Response。
- 浏览器收到服务器的Response信息后,会对信息进行处理,然后展示。
Request中包含什么?
- 请求方式
主要有GET,POST两种类型 - 请求URL
URL全称统一资源定位符,如一个网页文档,一张图片,一个视频等都可以用URL来确定 - 请求头
包含请求时的头部信息。如Uesr-Agent,Host,Cookies等信息 - 请求体
请求时额外携带的数据,如表单提交时的表单数据
Response中包含什么?
- 响应状态
有多种响应状态,如200代表成功,301跳转,404找不到页面,502服务器错误 - 响应头
如内容类型,内容长度,服务器信息,设置Cookies等等 - 响应体
最主要的部分,包含请求资源的内容,如网页HTML,图片二进制数据等
能抓怎样的数据?
- 网页文本
- 图片
- 视频
- 其他
怎样来解析?
- 直接处理
- Json解析
- 正则表达式
- BeautifulSoup
- PyQuery
- XPath
怎样解决JavaScript渲染的问题?
- 分析Ajax请求
- Selenium/WebDriver
- Splash
- Pyv8,Ghost.py
怎样保持数据?
- 文本
- 关系型数据库
- 非关系型数据库
- 二进制文件
什么是Urllib?
- Python内置的HTTP请求
- urllib.request 请求模块
- urllib.error 异常处理模块
- urllib.parse URL解析模块
- 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
初始化
- 字符串初始化
- URL初始化
- 文件初始化
Selenium
自动化测试工具,支持多种浏览器。
爬虫中主要用来解决JavaScript渲染的问题
安装Selenium
pip3 install selenium
上一篇: shell基础入门(1)
下一篇: Git常用命令