1、设置镜像源
默认的镜像是在国外的,所以下载速度可能会比较慢(实测中速度还算可以,根据需要来设置)
增加一个镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/// 设置是否在安装的时候显示该链接conda config --set show_channel_urls yes
1 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
2 // 设置是否在安装的时候显示该链接 conda config --set show_channel_urls yes
3 移除一个镜像源 conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
2、urllib,urllib2和 urllib3的区别
urllib 侧重于 url 基本的请求构造,urllib2侧重于 http 协议请求的处理,而 urllib3是服务于升级的http 1.1标准,且拥有高效 http连接池管理及 http 代理服务的功能库,从 urllib 到 urllib2和 urllib3是顺应互联应用升级浪潮的,这股浪潮从通用的网络连接服务到互联网网络的头部应用:支持长连接的 http 访问,网络访问不断的便捷化。
3、conda环境管理命令
conda --version ; conda env list ;
conda create --name snowflake biopython 这条命令将会给biopython包创建一个新的环境,位置在/envs/snowflakes
小技巧:很多跟在--后边常用的命令选项,可以被略写为一个短线加命令首字母。所以--name选项和-n的作用是一样的。通过conda -h或conda –-help来看大量的缩写。
conda create -n bunnies python=3 Astroid Babel 创建第二个基于python3 ,包含Astroid 和 Babel 包,称为bunnies的新环境,在/envs/bunnies文件夹里。
小技巧:在此同时安装你想在这个环境中运行的包,
小提示:在你创建环境的同时安装好所有你想要的包,在后来依次安装可能会导致依赖性问题(貌似是,不太懂这个术语怎么翻)。
conda info --envs
conda create -n flowers --clone snowflakes
conda remove -n flowers --all
https://blog.csdn.net/w739639550/article/details/76183855
https://blog.csdn.net/xc_zhou/article/details/80557078 #itchat实现头像照片墙
raise IOError("cannot write mode %s as JPEG" % im.mode)
IOError: cannot write mode RGBA as JPEG
#原因
查询资料,发现
其实是因为JPG图像有RGBA四个通道
所以调用含有A通道(透明度)方法/参数时候,程序不知道A通道怎么办,就会产生错误。
#解决办法
调用 Image.new 该方法时候,传进‘RGB’,而不是‘RGBA’
Image.new('RGB', (640, 640))
使用镜像地址pip: pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
https://www.cnblogs.com/Tsukasa/p/6799968.html
Python 爬虫基础:
threading:threading库可以在单独的线程中执行任何的在Python中可以调用的对象。Python 2.x中的thread模块已被废弃,用户可以使用threading模块代替。在Python 3中不能再使用thread模块。为了兼容性,Python 3将thread重命名为_thread。
queue:queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。
re:Python 自1.5版本起增加了re模块,它提供Perl风格的正则表达式模式。re模块使 Python语言拥有全部的正则表达式功能。
argparse:Python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。
configparser:读取配置文件的模块。
网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused WebCrawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)。实际的网络爬虫系统通常是几种爬虫技术相结合实现的。
通用网络爬虫
通用网络爬虫又称全网爬虫(Scalable Web Crawler),爬取对象从一些种子 URL 扩充到整个 Web。主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。
通用网络爬虫的结构大致可以分为页面爬取模块、页面分析模块、链接过滤模块、页面存储模块、URL 队列、初始 URL 集合几个部分。为提高工作效率,通用网络爬虫会采取一定的爬取策略。常用的爬取策略有:深度优先策略、广度优先策略。
1) 深度优先策略(DFS):其基本方法是按照深度由低到高的顺序,依次访问下一级网页链接,直到不能再深入为止。
2) 广度优先策略(BFS):此策略按照网页内容目录层次深浅来爬取页面,处于较浅目录层次的页面首先被爬取。当同一层次中的页面爬取完毕后,爬虫再深入下一层继续爬取。
聚焦网络爬虫
聚焦网络爬虫(Focused Crawler),又称主题网络爬虫(Topical Crawler),是指选择性地爬取那些与预先定义好的主题相关页面的网络爬虫。和通用网络爬虫相比,聚焦爬虫只需要爬取与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求。我们之前爬的歌单就属于这一种。
增量式网络爬虫
增量式网络爬虫(Incremental Web Crawler)是 指 对 已 下 载 网 页 采 取 增 量式更新和只爬取新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬取的页面是尽可能新的页面。和周期性爬取和刷新页面的网络爬虫相比,增量式爬虫只会在需要的时候爬取新产生或发生更新的页面 ,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬取的网页,减小时间和空间上的耗费,但是增加了爬取算法的复杂度和实现难度。现在比较火的舆情爬虫一般都是增量式网络爬虫。
深网爬虫
Web页面按存在方式可以分为表层网页(Surface Web)和深层网页(Deep Web,也称 Invisible Web Pages 或 Hidden Web)。 表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的 Web 页面。Deep Web 是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的 Web 页面。例如那些用户注册后内容才可见的网页就属于 Deep Web。
一个典型爬虫工程的代码结构:
config_load.py 配置文件加载
crawl_thread.py 爬取线程
mini_spider.py 主线程
spider.conf 配置文件
url_table.py url队列、url表
urls.txt 种子url集合
webpage_parse.py 网页分析
webpage_save.py 网页存储
python网络数据采集 用python写网络爬虫 哪个好:(某人这样说)
Beautiful Soup。名气大,整合了一些常用爬虫需求。缺点:不能加载JS。
Scrapy。看起来很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。
mechanize。优点:可以加载JS。缺点:文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。
selenium。这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
cola。一个分布式爬虫框架。项目整体设计有点糟,模块间耦合度较高,不过值得借鉴。
以下是我的一些实践经验:
对于简单的需求,比如有固定pattern的信息,怎么搞都是可以的。
对于较为复杂的需求,比如爬取动态页面、涉及状态转换、涉及反爬虫机制、涉及高并发,这种情况下是很难找到一个契合需求的库的,很多东西只能自己写。
至于题主提到的:
还有,采用现有的Python爬虫框架,相比与直接使用内置库,优势在哪?因为Python本身写爬虫已经很简单了。
third party library可以做到built-in library做不到或者做起来很困难的事情,仅此而已。还有就是,爬虫简不简单,完全取决于需求,跟Python是没什么关系的。
Scrapy vs requests+beautifulsoup 两种爬虫模式比较:
1、requests和beautifulsoup都是库,scrapy是框架。
2、scrapy框架中可以加入requests和beautifulsoup。
3、scrapy基于twisted,性能是最大的优势。
4、scrapy方便扩展,提供了很多内置的功能。
5、scrapy内置的css和xpath selector非常方便,beautifulsoup最大的缺点就是慢。
PyCharm报错:Please specify a different SDK name解决方法:这个问题出现的原因是因为PyCharm中存在相同名字的虚拟环境变量。可能是因为一直使用PyCharm的默认设置来建立工程,所以每个工程都建立了自己独立的虚拟环境。我个人删除了一些工程后,又建立相同名字的工程。所以才会出现存在相同的虚拟环境名的现象。删掉即可
用scrapy startproject tutorial命令初始化爬虫项目时报错:cannot import name 'etree' from 'lxml';是因为lxml 4.1以后的版本不支持etree,降到3.8以后问题解决-------说明Python包和项目之间的同步和匹配机制并不完善。
网上又说这样解决的:解决办法:import lxml.html
etree = lxml.html.etree 但我改对应文件时报错:etree = lxml.html.etree ibuteError: module 'lxml' has no attribute 'html';;;还是降版本解决了问题
Python yield 使用浅析
https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/
一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。
yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。
如何判断一个函数是否是一个特殊的 generator 函数?可以利用 isgeneratorfunction 判断
Scrapy:
HTTP status code is not handled or not allowed的解决方法:在settings里面添加
HTTPERROR_ALLOWED_CODES = [403]#上面报的是403,就把403加入。
原因是 :scrapy默认是遵守爬虫准则的,即settings里面,ROBOTSTXT_OBEY = True。
比如抓取百度,在https://www.baidu.com/robots.txt里,有这样的一个规范。如果遵守,比如今日头条,是不能用scrapy爬取的。这个时候需要把ROBOTSTXT_OBEY=False.也就是不遵守它的规则。