目录

爬虫三步

  1. 抓取页面:使用请求库
  2. 分析页面:使用解析库
  3. 存储数据:使用数据库

所以,根据这三步,我们要下载一些第三方库,也就是请求库,解析库,数据库.

经常听有人说:人生苦短,我用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安装不成功

tesseract Github下载地址

有趣和坑爹的是,有一款同名的游戏,我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爬虫笔记安装篇的更多相关文章

    1. SystemTap 学习笔记 - 安装篇

      https://segmentfault.com/a/1190000000671438 在安装前,需要知道下自己的系统环境,我的环境如下: uname -r 2.6.18-308.el5 Linux ...

    2. python爬虫笔记Day01

      python爬虫笔记第一天 Requests库的安装 先在cmd中pip install requests 再打开Python IDM写入import requests 完成requests在.py文 ...

    3. [Python爬虫笔记][随意找个博客入门(一)]

      [Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...

    4. Python学习笔记进阶篇——总览

      Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...

    5. Python学习笔记基础篇——总览

      Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

    6. Python爬虫笔记一(来自MOOC) Requests库入门

      Python爬虫笔记一(来自MOOC) 提示:本文是我在中国大学MOOC里面自学以及敲的一部分代码,纯一个记录文,如果刚好有人也是看的这个课,方便搬运在自己电脑上运行. 课程为:北京理工大学-嵩天-P ...

    7. Python爬虫笔记(一):爬虫基本入门

      最近在做一个项目,这个项目需要使用网络爬虫从特定网站上爬取数据,于是乎,我打算写一个爬虫系列的文章,与大家分享如何编写一个爬虫.这是这个项目的第一篇文章,这次就简单介绍一下Python爬虫,后面根据项 ...

    8. Python爬虫笔记技术篇

      目录 前言 requests出现中文乱码 使用代理 BeautifulSoup的使用 Selenium的使用 基础使用 Selenium获取网页动态数据赋值给BeautifulSoup Seleniu ...

    9. python 爬虫库安装

      一键安装python爬虫库 pip3 install requests selenium beautifulsoup4 pyquery pymysql pymongo redis flask djan ...

    随机推荐

    1. 关于python模块总结

      名词解释 模块(module):在python中,一个.py文件就是一个模块 包(package):为了避免模块名冲突,Python又引入了按目录来组织模块的方法.当目录下存在__init__.py, ...

    2. 深层次揭示runBlocking与coroutineScope之间的异同点

      在之前https://www.cnblogs.com/webor2006/p/11731763.html咱们写过这样的一个例子,先来回顾一下: 也就是来演示runBlocking与coroutineS ...

    3. BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)

      #include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...

    4. solr的倒序索引

      倒序索引: 在每次进行检索时,搜索引擎必须遍历每个网页,查找网页中是否包含你指定的关键词,这个工作量是十分巨大的,主要原因有: 1.互联网的网页基数非常大; 2.在每个网页中检索是否含有指定的关键词并 ...

    5. danci3

      permit 英 [pə'mɪt] 美 [pɚ'mɪt] vi. 许可:允许 vt. 许可:允许 n. 许可证,执照 encapsulate 英 [ɪn'kæpsjʊleɪt; en-] 美 [ɪn' ...

    6. hdu3625

      hdu3625 题意: 酒店发生一起谋杀案.作为镇上最好的侦探,您应该立即检查酒店的所有N个房间.但是,房间的所有门都是锁着的,钥匙刚锁在房间里,真是个陷阱!您知道每个房间里只有一把钥匙,并且所有可能 ...

    7. 好的想法只是OKR的开始--创业者谨记

      每一个出版过作品的作家都有这样的体验:有人找到你,说他有一个极妙的想法,并迫不及待的想和你一起实现这个想法:结局也总是差不多,它们艰难的完成了灵感部分,而你只需要简单的把它写成小说,收益则需要五五分成 ...

    8. Python爬虫进阶 | 异步协程

      一.背景 之前爬虫使用的是requests+多线程/多进程,后来随着前几天的深入了解,才发现,对于爬虫来说,真正的瓶颈并不是CPU的处理速度,而是对于网页抓取时候的往返时间,因为如果采用request ...

    9. WinDbg常用命令系列---显示数据类型dt/dtx

      dt (Display Type) dt命令显示有关局部变量.全局变量或数据类型的信息.这可以显示有关简单数据类型以及结构和联合的信息. 用户模式下: dt [-DisplayOpts] [-Sear ...

    10. Cesium 加载天地图

      网上有很多 就是没说 加载天地图需要开发者秘钥,这个需要去天地图官网申请一个就可以了,下面贴上源码 还有就是Cesium也是需要token的哈 <!DOCTYPE html> <ht ...