Python爬虫入门
写在前面
学习爬虫也很久了,但是一直没有整理自己的笔记,然后,今天整理的是慕课网疯狂的蚂蚁crazyant 老师的《Python开发简单爬虫》这门课程的内容,大家也可以关注一下这位老师,讲得很不错,这边文章中也加上了自己的一些见解,如有错误,告诉我一下,谢谢
什么是爬虫
从百度词条中,我们可以知道,爬虫是一段自动抓取万维网信息的程序.通过爬虫我们可以爬取URL,获取我们想要的数据信息
爬虫分类
我这里就简单从复杂程度来分类了
1.简单爬虫[本次讲解的]
特点:不需要登录,直接可以爬取的静态网页
2.复杂爬虫
特点:
1.需要登录才能获取数据,
2.页面数据通过Ajax异步渲染得到的页面
爬虫架构
架构这个东西,是一开始心里得有个底的,我们需要了解爬虫的整个执行流程
上面就是包括了爬虫程序的5个主要部分
我们来看看动态运行流程
简单说明:
1.调度器首先询问URL管理器是否有待爬取的url,
2.如果有,就从URL管理器中获取一个待爬取的URL交给下载器进行下载,
3.下载器下载完,将数据返回给调度器
4.调度器将下载下来的数据发给解析器进行解析,解析器解析价值数据和新的URL列表
5.调度器将价值数据进行收集,并且将新解析出来的url列表发给URL管理器
这样一直循环,一直到URL管理器中没有待爬取的url,才会停止
URL管理器介绍
1. 什么是URL管理器
顾名思义,这个当然是管理的url地址的
为了防止重复抓取,循环抓取,这个URL地址必须包含两个部分
1.待爬取的URL列表
2.已经爬取过的URL列表
简单说明:
1.一开始,待爬取URL列表中有一个起始的URL,爬取过的URL列表为空
2.爬取起始的URL,会得到价值数据和新得URL列表,并将起始URL放到爬取过的URL列表中
3.将新的URL列表保存在待爬取列表中(保存之前,会先判断待爬取列表中是否已经存在,[这样保证了不会重复]),供调度器使用
2.URL管理器实现方式
网页下载器介绍
调度器将待爬取的URL交给下载器进行下载,下载得到html文件,并将文件保存到本地
下载器分类
第一类:Urllib2(Python官方基础模块)
1.支持直接静态网页下载
2.或者需要向网页提交一些需要用户输入的数据
3.支持需要用户登录访问的cookie处理
4.需要代理访问的代理处理
第二类requests是一个第三方的库[其实更加强大]
开始介绍urllib2
urllib2网页下载器下载网页的方法
方式一:直接将需要下载的url传送给urllib2.urlopen()方法
import urllib2# python2
from urllib import request #python3
#直接请求
response = urllib2.urlopen('http://www.baidu.com')# python2
response2 = urllib2.urlopen('http://www.baidu.com')# python3
# 获取状态码,200表示成功
print("方式一")
print (response.getcode())
# 读取内容文本
cont = response.read()
方式二:添加data.header等信息到urllib2.request类,,生成一个request对象才能够
#方式二:创建Request对象
request_ = request.Request(baidu)
#添加请求头
request_.add_header('User-Agent','Mozilla/5.0')
#发送请求
response2 = request.urlopen(request_)
print("方式二")
print(response2.getcode())
网页解析器
常用的网页解析器有:
正则表达式:将整个文档当做一个字符串 使用模糊匹配的方式提取出有价值的数据
适用于简单文档
Html.parser:这个是python自带模块的
BeautifulSoup:这个第三方的插件
Lxml:第三方插件解析html或者xml
ps:BeautifulSoup
可以使用Html.parser作为解析器
也可以使用lxml作为解析器
Beautiful Soup操作流程
[查看官网]
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#quick-start
步骤一:引入包
from bs4 import BeautifulSoup
步骤二:创建Beautiful Soup对象
soup = BeautifulSoup(html_doc, 'html.parser',from_encoding='utf8')
接着,就可以使用soup这个对象对html数据进行解析了