Python爬虫笔记安装篇
爬虫三步
- 抓取页面:使用请求库
- 分析页面:使用解析库
- 存储数据:使用数据库
所以,根据这三步,我们要下载一些第三方库,也就是请求库,解析库,数据库.
经常听有人说:人生苦短,我用Python
我想这大概是因为Python有众多的第三方库,别人已经写好了,你调用就完事了
下面是爬虫所需要的一些第三方库的安装,大部分可以使用pip安装,少数需要去官网下载
pip是什么?超级爽的包管理工具,可以理解为手机上的应用商店
请求库
Requests:阻塞式请求库
Requests是什么
Requests是一个请求库,阻塞式的.意思就是你在请求浏览器的时候,只能等,期间什么都做不了,效率很低很低的
Requests安装
pip install Requests #Request库安装
selenium:浏览器自动化测试
selenium安装
pip install selenium #selenium库安装
安装完selenium之后,下载ChromeDriverChromeDriver下载,其他浏览器也有驱动,但是我只用Chrome,根据你的Chrome浏览器版本下载对应的Driver,然后把Driver放到Python安装目录的Scripts目录下即可.使用where python即可查看安装目录
在Python文件中输入以下,运行,会启动Chrome窗口
from selenium import webdriver
browser = webdriver.Chrome()
如果弹窗一闪而退了,说明版本有问题,如果Chrome版本的Driver没有,恭喜你,遇到了和我一样的问题,原因大概是因为新版的Chrome浏览器实现了隐藏窗口,因为你爬虫的时候,总开个浏览器窗口也不是个事
PhantomJS:隐藏浏览器窗口
PhantomJS是什么
上面说到,最新版的Chrome浏览器支持隐藏窗口,其实使用PhantomJS也可以实现隐藏窗口.Selenium是支持PhantomJS的,支持不同的浏览器,很方便
PhantomJS安装
PhantomJS居然不支持pip安装,真是诧异,那就在官网下载吧.下载完成之后打开bin文件夹,有一个phantomjs.exe,还是个小白布精灵图标好可爱~和ChromeDriver一样,把这个exe放到Python的Scripts目录即可
检测安装很简单,直接在终端打PhantomJS即可,如果进去了就ok,ctrl+d退出
PhantomJS使用
from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get('https://www.baidu.com')
print (browser.current_url)
aiohttp:异步请求库
aiohttp是什么
异步请求库,和Requests刚好相反,在请求的时候,在浏览器还没搭理你的时候,可以干点其他的事.在爬虫后期的代理中,用处非常大
aiohttp安装
pip install aiohttp
#aiohttp官方推荐再下载两个相关库,不下也没事
#cchardet是字符编码检测库,aiodns是加速DNS解析库
pip install cchardet aiodns
解析库
安装完上面的请求库之后,我们可以获取大量的网页数据了,但是怎么提取我们想要的数据呢?这就要使用解析库了,非常强大
lxml:解析HTML和XML,支持XPath
lxml是什么
解析HTML和XML的一个解析库,支持XPath解析方式
lxml安装
pip install lxml
BeautifulSoup:解析HTML和XML
BeautifulSoup是什么
解析HTML和XML的一个解析库,具有强大的API和多样的解析样式
BeautifulSoup安装
pip install bs4
BeautifulSoup验证安装
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>Hello</p>','lxml')
print (soup.p.string)
输出hello表明安装成功
BeautifulSoup基本用法
我有一个重要的提醒,在获取文本信息的时候,不要使用string,最好使用get_text()
#BeautifulSoup初始化可以自动更正HTML格式,补全没有闭合的元素
print (soup.prettify())#以标准的缩进格式输出
print(soup.title)#标题
print(soup.title.string)#标题里面的内容
print(soup.title.name)#title的节点名称,就是title
print(soup.p)#第一个p元素的内容
print(soup.p.attrs)#第一个p元素的所有属性和值
print(soup.p['class'])#第一个p元素class属性的值
print(soup.p['name'])#第一个p元素name属性的值
print(soup.p.b.string)#第一个p标签下的b标签的文本内容
print(soup.p.contents)#第一个p元素下的所有子节点,不包括孙子节点
#第一个p元素所有的子节点
print(soup.p.descendants)
for i,child in enumerate(soup.p.descendants):
print(i,child)
print(soup.p.parent)#第一个p元素的父节点
#第一个p元素所有的父节点
print(soup.p.parents)
print(list(enumerate(soup.p.parents)))
print(soup.p.next_sibling)#第一个p元素的下一个兄弟节点,注意有回车的时候要写两个next_sibling
print(list(enumerate(soup.p.next_siblings)))#第一个p元素后面的所有兄弟节点
print(soup.p.previous_sibling)#第一个p元素的上一个兄弟节点
print(list(enumerate(soup.p.previous_siblings)))#第一个p元素前面的所有兄弟节点
#########################################################
#下面这些是比较常用的,上面的了解一下即可
# 判断某个标签是否有属性,例如img标签有一个alt属性,有时候img没有alt属性,我就可以判断一下,否则出错
if img.attrs.get('alt'):
soup.find(id='text-7').find_all(name='li')
#根据文本查找到该标签
# 例如下面的,根据Description查找含有Description的第一个p元素
test = soup.find(lambda e: e.name == 'p' and 'Description' in e.text)
# 其实如果是直接子元素的话,也可以使用parent,但是这个很少用,适用情况不多
test= soup.find(text=re.compile('Description')).parent
#查找某个属性为包含的标签
#标签的属性有很多值,例如img标签的alt属性,有item和img两个值,可以通过如下查找
noscript.find_all('img',attrs={'alt':re.compile('item')})
#判断属性里面是否有某个值
if 'Datasheet' in img['alt']:
#替换所有的br换行符号
html = get_one_page(url)
return html.replace('<br>', '').replace('<br />', '').replace('<br/>', '')
#去除最后一个逗号
datasheet_url.rstrip(',')
#去除关键字和空格,只要后面的内容
#例如 Function : Sensitive Gate Silicon Controlled Rectifiers
#得到的就是Sensitive Gate Silicon Controlled Rectifiers
return re.sub(keywords+'.*?[\s]:.*?[\s]', '', child.find(text=re.compile(keywords)).string)
#返回某个符号之前的字符
import re
text="K6X4008C1F-BF55 ( 32-SOP, 55ns, LL )"
b=re.search('^[^\(]*(?=\()',text,re.M)
if b:
print(b.group(0))
print(len(b.group(0)))
else:
print('没有')
#关键地方是,这里是匹配的( 括号需要\来转义一下
^[^\(]*(?=\()
#如果是逗号,可以写
^[^,]*(?=,)
#如果是单词,比如我想匹配Vae这个单词,如下
text='XuSong Vae hahaha'
text2='VV Vae hahaha'
b=re.search('^[^Vae]*(?=Vae)',text,re.M)
#这个例子很重要,text是可以正则出XuSong的,但是下面的VV就正则不出来了,因为^是后面的Vae的任意一个单词,只要前面包含就不行,VV包含了V,所以就不行了,我尝试着给Vae加括号,也不行.然后我就想了一个办法,把Vae替换成逗号之类的符号不就可以了,只要是一个字符就行,如下
text='XuSong Vae hahaha'
text2='VV Vae hahaha'
b=re.search('^[^,]*(?=,)',text.replace('Vae',','),re.M)
#一段HTML元素中去除a标签,但是保留a标签的值
return re.sub('(<\/?a.*?>)', '', description_element)
#有时候想获取一段HTML元素内容,因为有的排版在,比如ul和li元素,排版是在的,如果使用text就是一串文本,换行都没了,可以这样
str(child.find(class_='ul2')) #获取到这段HTML元素之后,使用str函数变成字符串即可
#下一个兄弟元素最好使用find_next_sibling()
#等待验证,和next_sibling比较一下再说
#Python爬虫数据插入到MongoDB
import pymongo
client = pymongo.MongoClient("mongodb://admin:test123@192.168.3.80:27017/")
db = client.datasheetcafe
collection = db.datasheetcafe
collection.insert_one(message)
pyquery:解析HTML,支持CSS选择器
pyquery安装
pip install pyquery
tesserocr:识别图形验证码
tesserocr是什么
在各大网站上,很多都有图形验证码,这个时候可以使用OCR来识别,OCR是光学字符识别,通过扫描字符翻译成文本.tesserocr是一个OCR的识别库
tesserocr安装
首先要安装tesserocr的核心库tesseract,必须下载,否则tesserocr安装不成功
有趣和坑爹的是,有一款同名的游戏,我Google的时候以为是官网中招了 tesseract 同名游戏
选择一个windows版本下载安装,过程中可以自行勾选是否添加多语言,注意,在线下多语言超级慢,安装完成之后添加一下环境变量,有两个
Path里面添加 C:\Program Files\Tesseract-OCR
新建一个环境变量TESSDATA_PREFIX C:\Program Files\Tesseract-OCR\tessdata
tesserocr还是通过pip安装
pip install tesserocr pillow
如果安装出现了一大堆红色的,就换个方式,使用whl安装
在tesserocr whl 里面找到你对应的Python版本,下载,注意你的Python是32位是还是64位的,下载whl之后执行
pip install C:\Users\Justin\Downloads\tesserocr-2.4.0-cp37-cp37m-win32.whl
至此,tesserocr验证码识别就安装完成了
Web库
Flask:轻量级的Web服务程序
Flask安装
pip install flask
Flask验证安装
运行,然后终端会出现连接,ctrl+鼠标左键点击就可以看到浏览器中出现许嵩
from flask import Flask
app=Flask(__name__)
@app.route("/")
def hello():
return "许嵩"
if __name__=="__main__":
app.run()
Tornado:支持异步的Web框架,支持成千上万的连接
Tornado安装
pip install tornado
Tornado验证安装
这个终端不会输出访问地址了,自己在浏览器上输入http://127.0.0.1:8888/
能看到Hello就代表成功了
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello")
def make_app():
return tornado.web.Application([
(r"/",MainHandler)
])
if __name__=="__main__":
app=make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
App库
Python爬虫不仅可以爬网页,也可以爬App的数据
Charles:网络抓包工具,移动端支持也很好
APP的暂时不写
爬虫框架
我直接使用requests,Beautifulsoup已经爬取了几万条数据了,爬虫的爬取量不大的话自己写是ok的,但是你会发现,爬虫的代码好多都是重复的啊,仅仅是爬虫的规则不一样而已,所以,有了一点基础之后就可以开始上手框架了
pyspider框架:中国人写的框架
这个框架我真的是无语了,都说很强大,现在是2019.7.25号,这个框架在GitHub4个月没有更新了, 我使用的时候遇到一堆问题
一堆问题啊,真坑
pyspider安装
pip install pyspider
问题一:需要先安装Pycurl
上面的安装pyspider会报错,提示你安装pycurl,我就奇怪了,不能整合到一起吗
去这个网址https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl
找到你对应的版本,比如我的Python是3.7.3 32bit 的就使用37,32位,如下
- [pycurl‑7.43.0.3‑cp37‑cp37m‑win32.whl](javascript:
Python爬虫笔记安装篇的更多相关文章
- SystemTap 学习笔记 - 安装篇
https://segmentfault.com/a/1190000000671438 在安装前,需要知道下自己的系统环境,我的环境如下: uname -r 2.6.18-308.el5 Linux ...
- python爬虫笔记Day01
python爬虫笔记第一天 Requests库的安装 先在cmd中pip install requests 再打开Python IDM写入import requests 完成requests在.py文 ...
- [Python爬虫笔记][随意找个博客入门(一)]
[Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...
- Python学习笔记进阶篇——总览
Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python爬虫笔记一(来自MOOC) Requests库入门
Python爬虫笔记一(来自MOOC) 提示:本文是我在中国大学MOOC里面自学以及敲的一部分代码,纯一个记录文,如果刚好有人也是看的这个课,方便搬运在自己电脑上运行. 课程为:北京理工大学-嵩天-P ...
- Python爬虫笔记(一):爬虫基本入门
最近在做一个项目,这个项目需要使用网络爬虫从特定网站上爬取数据,于是乎,我打算写一个爬虫系列的文章,与大家分享如何编写一个爬虫.这是这个项目的第一篇文章,这次就简单介绍一下Python爬虫,后面根据项 ...
- Python爬虫笔记技术篇
目录 前言 requests出现中文乱码 使用代理 BeautifulSoup的使用 Selenium的使用 基础使用 Selenium获取网页动态数据赋值给BeautifulSoup Seleniu ...
- python 爬虫库安装
一键安装python爬虫库 pip3 install requests selenium beautifulsoup4 pyquery pymysql pymongo redis flask djan ...
随机推荐
- 关于python模块总结
名词解释 模块(module):在python中,一个.py文件就是一个模块 包(package):为了避免模块名冲突,Python又引入了按目录来组织模块的方法.当目录下存在__init__.py, ...
- 深层次揭示runBlocking与coroutineScope之间的异同点
在之前https://www.cnblogs.com/webor2006/p/11731763.html咱们写过这样的一个例子,先来回顾一下: 也就是来演示runBlocking与coroutineS ...
- BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)
#include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...
- solr的倒序索引
倒序索引: 在每次进行检索时,搜索引擎必须遍历每个网页,查找网页中是否包含你指定的关键词,这个工作量是十分巨大的,主要原因有: 1.互联网的网页基数非常大; 2.在每个网页中检索是否含有指定的关键词并 ...
- danci3
permit 英 [pə'mɪt] 美 [pɚ'mɪt] vi. 许可:允许 vt. 许可:允许 n. 许可证,执照 encapsulate 英 [ɪn'kæpsjʊleɪt; en-] 美 [ɪn' ...
- hdu3625
hdu3625 题意: 酒店发生一起谋杀案.作为镇上最好的侦探,您应该立即检查酒店的所有N个房间.但是,房间的所有门都是锁着的,钥匙刚锁在房间里,真是个陷阱!您知道每个房间里只有一把钥匙,并且所有可能 ...
- 好的想法只是OKR的开始--创业者谨记
每一个出版过作品的作家都有这样的体验:有人找到你,说他有一个极妙的想法,并迫不及待的想和你一起实现这个想法:结局也总是差不多,它们艰难的完成了灵感部分,而你只需要简单的把它写成小说,收益则需要五五分成 ...
- Python爬虫进阶 | 异步协程
一.背景 之前爬虫使用的是requests+多线程/多进程,后来随着前几天的深入了解,才发现,对于爬虫来说,真正的瓶颈并不是CPU的处理速度,而是对于网页抓取时候的往返时间,因为如果采用request ...
- WinDbg常用命令系列---显示数据类型dt/dtx
dt (Display Type) dt命令显示有关局部变量.全局变量或数据类型的信息.这可以显示有关简单数据类型以及结构和联合的信息. 用户模式下: dt [-DisplayOpts] [-Sear ...
- Cesium 加载天地图
网上有很多 就是没说 加载天地图需要开发者秘钥,这个需要去天地图官网申请一个就可以了,下面贴上源码 还有就是Cesium也是需要token的哈 <!DOCTYPE html> <ht ...
- SystemTap 学习笔记 - 安装篇