pip install *:ERROR: Exception: Traceback (most recent call last)

Python010

pip install *:ERROR: Exception: Traceback (most recent call last),第1张

使用pip install 某些模块发生安装错误:

Traceback (most recent call last):

File "d:\python3.7.4\lib\site-packages\pip_vendor\urllib3\response.py", line 425, in _error_catcher

yield

File "d:\python3.7.4\lib\site-packages\pip_vendor\urllib3\response.py", line 507, in read

data = self._fp.read(amt) if not fp_closed else b""

File "d:\python3.7.4\lib\site-packages\pip_vendor\cachecontrol\filewrapper.py", line 62, in read

data = self.__fp.read(amt)

File "d:\python3.7.4\lib\http\client.py", line 457, in read

n = self.readinto(b)

File "d:\python3.7.4\lib\http\client.py", line 501, in readinto

n = self.fp.readinto(b)

File "d:\python3.7.4\lib\socket.py", line 589, in readinto

return self._sock.recv_into(b)

File "d:\python3.7.4\lib\ssl.py", line 1071, in recv_into

return self.read(nbytes, buffer)

File "d:\python3.7.4\lib\ssl.py", line 929, in read

return self._sslobj.read(len, buffer)

socket.timeout: The read operation timed out

During handling of the above exception, another exception occurred:

到网上搜了很多方法,包括使用管理员权限,修改pip main 方法,都不行,后来我想应该就是简单的网速低导致断链的问题吧?pip可能不支持断点续传。

解决方法:

替换镜像地址

<small style="font-size: 12pxletter-spacing: normalcolor: rgb(171, 171, 171)display: blocktext-align: rightfont-family: Verdana, "Lucida Grande", Geneva, Arial, sans-seriffont-style: normalfont-variant-ligatures: normalfont-variant-caps: normalfont-weight: 400orphans: 2text-indent: 0pxtext-transform: nonewhite-space: normalwidows: 2word-spacing: 0px-webkit-text-stroke-width: 0pxbackground-color: rgb(255, 255, 255)text-decoration-style: initialtext-decoration-color: initial">2019-07-04 10:55 微风阳光 阅读(12968) 评论(1) 编辑 [收藏](javascript:void(0))</small>

国内镜像源

清华: https://pypi.tuna.tsinghua.edu.cn/simple

阿里云: http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学: http://pypi.hustunique.com/

山东理工大学: http://pypi.sdutlinux.org/

豆瓣: http://pypi.douban.com/simple/

临时使用

在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple

例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider,这样就会从清华这边的镜像去安装pyspider库。

一劳永逸

Linux下,修改 ~/.pip/pip.conf (没有就创建一个文件夹及文件。文件夹要加“.”,表示是隐藏文件夹)

内容如下:

|

[global]

index-url = http://mirrors.aliyun.com/pypi/simple/

[install]

trusted-host=mirrors.aliyun.com

|

windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini。内容同上。

本机win10操作系统,目录:C:\Users\DELL\AppData\Roaming\pip\pip.ini

遇到的问题

实际使用的时候,一开始使用清华的镜像,在安装时,总是提示

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

换了阿里的镜像之后,问题得到了解决。

前面写了一篇文章关于爬取市面上所有的Python书思路,这也算是我们数据分析系列讲座里面的一个小的实战项目。上次代码没有写完,正好周末有时间把代码全部完成并且存入了数据库中,今天就给大家一步步分析一下是我是如何爬取数据,清洗数据和绕过反爬虫的一些策略和点滴记录。

1

目标网站分析-主页面爬取

1).市面上所有的Python书,都在京东,淘宝和豆瓣上,于是我选择了豆瓣来爬取

2).分析网站的结构,其实还是比较简单的,首先有一个主的页面,里面有所有python的链接,一共1388本(其中有100多本其实是重复的),网页底部分页显示一共93页

3).这个页面是静态页面,url页比较有规律,所以很容易构造出所有的url的地址

4).爬虫每个分页里面的所有的Python书和对应的url,比如第一页里面有"笨办法这本书",我们只需要提取书名和对应的url

2

单个页面分析爬取

1).上面我们已经提取了93个页面的所有的Python书和对应的url,一共是93*15大概1300多本书,首先先去重,然后我们可以把它存到内存里面用一个字典保存,或者存到一个csv文件中去(有同学可能奇怪为啥要存到文件里面呢,用字典存取不是方便吗,先不说最后揭晓)

2).我们接着分析每本书页面的特征:

上一片文章说过我们需要分析:

作者/出版社/译者/出版年/页数/定价/ISBN/评分/评价人数

看一下网站的源码,发现主要的信息在div id="info" 和div class="rating_self clearfix"

3).这一部分的数据清洗是比较麻烦的,因为不是每一本书都是有点评和评分系统的,而且不是每一本书都有作者,页面,价格的,所以提取的时候一定要做好异常处理,比如有的页面长的这样:

原始数据采集的过程中有很多不一致的数据:

书的日期表示格式,各种各样都有:

有的书的日期是:'September 2007','October 22, 2007','2017-9','2017-8-25'

有的书的价格是货币单位不统一,有美金,日元,欧元和人民币

比如:CNY 49.00,135,19 €,JPY 4320, $ 176.00

3

多线程爬取

1).有的同学后台问我,你是用scrapy框架还是自己动手写的,我这个项目是自己动手写的,其实scrapy是一个非常棒的框架,如果爬取几十万的数据,我一定会用这个超级武器.

2).我用的是多线程爬取,把所有的url都扔到一个队列里面,然后设置几个线程去队列里面不断的爬取,然后循环往复,直到队列里的url全部处理完毕

3).数据存储的时候,有两种思路:

一种是直接把爬取完的数据存到SQL数据库里面,然后每次新的url来了之后,直接查询数据库里面有没有,有的话,就跳过,没有就爬取处理

另一种是存入CSV文件,因为是多线程存取,所以一定要加保护,不然几个线程同时写一个文件的会有问题的,写成CSV文件也能转换成数据库,而且保存成CSV文件还有一个好处,可以转成pandas非常方便的处理分析.

4

反爬虫策略

1).一般大型的网站都有反爬虫策略,虽然我们这次爬的数量只有1000本书,但是一样会碰到反爬虫问题

2).关于反爬虫策略,绕过反爬虫有很多种方法。有的时候加时延(特别是多线程处理的时候),有的时候用cookie,有的会代理,特别是大规模的爬取肯定是要用代理池的,我这里用的是cookie加时延,比较土的方法.

3).断点续传,虽然我的数据量不是很大,千条规模,但是建议要加断点续传功能,因为你不知道在爬的时候会出现什么问题,虽然你可以递归爬取,但是如果你爬了800多条,程序挂了,你的东西还没用存下来,下次爬取又要重头开始爬,会吐血的(聪明的同学肯定猜到,我上面第二步留的伏笔,就是这样原因)

5

代码概述篇

1).整个的代码架构我还没有完全优化,目前是6个py文件,后面我会进一步优化和封装的

spider_main:主要是爬取93个分页的所有书的链接和书面,并且多线程处理

book_html_parser:主要是爬取每一本书的信息

url_manager:主要是管理所有的url链接

db_manager:主要是数据库的存取和查询

util:是一个存放一些全局的变量

verify:是我内部测试代码的一个小程序

2).主要的爬取结果的存放

all_books_link.csv:主要存放1200多本书的url和书名

python_books.csv:主要存放具体每一本书的信息

3).用到的库

爬虫部分:用了requests,beautifulSoup

数据清洗:用了大量的正则表达式,collection模块,对书的出版日期用了datetime和calendar模块

多线程:用了threading模块和queue

结论:

好,今天的全网分析Python书,爬虫篇,就讲道这里,基本上我们整个这个项目的技术点都讲了一遍,爬虫还是很有意思的,但是要成为一个爬虫高手还有很多地方要学习,想把爬虫写的爬取速度快,又稳健,还能绕过反爬虫系统,并不是一件容易的事情. 有兴趣的小伙伴,也可以自己动手写一下哦。源码等后面的数据分析篇讲完后,我会放github上,若有什么问题,也欢迎留言讨论一下.