1. Python爬虫:如何在一个月内学会爬取大规模数
爬虫是入门Python最好的方式,没有之一。Python有很多应用的方向,比如后台开发、web开发、科学计算等等,但爬虫对于初学者而言更友好,原理简单,几行代码就能实现基本的爬虫,学习的过程更加平滑,你能体会更大的成就感。
掌握基本的爬虫后,你再去学习Python数据分析、web开发甚至机器学习,都会更得心应手。因为这个过程中,Python基本语法、库的使用,以及如何查找文档你都非常熟悉了。
对于小白来说,爬虫可能是一件非常复杂、技术门槛很高的事情。比如有人认为学爬虫必须精通 Python,然后哼哧哼哧系统学习 Python 的每个知识点,很久之后发现仍然爬不了数据;有的人则认为先要掌握网页的知识,遂开始 HTMLCSS,结果入了前端的坑,瘁……
但掌握正确的方法,在短时间内做到能够爬取主流网站的数据,其实非常容易实现,但建议你从一开始就要有一个具体的目标。
在目标的驱动下,你的学习才会更加精准和高效。那些所有你认为必须的前置知识,都是可以在完成目标的过程中学到的。这里给你一条平滑的、零基础快速入门的学习路径。
1.学习 Python 包并实现基本的爬虫过程
2.了解非结构化数据的存储
3.学习scrapy,搭建工程化爬虫
4.学习数据库知识,应对大规模数据存储与提取
5.掌握各种技巧,应对特殊网站的反爬措施
6.分布式爬虫,实现大规模并发采集,提升效率
- -
学习 Python 包并实现基本的爬虫过程
大部分Python爬虫都是按“发送请求——获得页面——解析页面——抽取并储存内容”这样的流程来进行,这其实也是模拟了我们使用浏览器获取网页信息的过程。
Python爬虫相关的包很多:urllib、requests、bs4、scrapy、pyspider 等,建议从requests+Xpath 开始,requests 负责连接网站,返回网页,Xpath 用于解析网页,便于抽取数据。
如果你用过 BeautifulSoup,会发现 Xpath 要省事不少,一层一层检查元素代码的工作,全都省略了。这样下来基本套路都差不多,一般的静态网站根本不在话下,豆瓣、糗事网络、腾讯新闻等基本上都可以上手了。
当然如果你需要爬取异步加载的网站,可以学习浏览器抓包分析真实请求或者学习Selenium来实现自动化,这样,知乎、时光网、猫途鹰这些动态的网站也可以迎刃而解。
- -
了解非结构化数据的存储
爬回来的数据可以直接用文档形式存在本地,也可以存入数据库中。
开始数据量不大的时候,你可以直接通过 Python 的语法或 pandas 的方法将数据存为csv这样的文件。
当然你可能发现爬回来的数据并不是干净的,可能会有缺失、错误等等,你还需要对数据进行清洗,可以学习 pandas 包的基本用法来做数据的预处理,得到更干净的数据。
- -
学习 scrapy,搭建工程化的爬虫
掌握前面的技术一般量级的数据和代码基本没有问题了,但是在遇到非常复杂的情况,可能仍然会力不从心,这个时候,强大的 scrapy 框架就非常有用了。
scrapy 是一个功能非常强大的爬虫框架,它不仅能便捷地构建request,还有强大的 selector 能够方便地解析 response,然而它最让人惊喜的还是它超高的性能,让你可以将爬虫工程化、模块化。
学会 scrapy,你可以自己去搭建一些爬虫框架,你就基本具备爬虫工程师的思维了。
- -
学习数据库基础,应对大规模数据存储
爬回来的数据量小的时候,你可以用文档的形式来存储,一旦数据量大了,这就有点行不通了。所以掌握一种数据库是必须的,学习目前比较主流的 MongoDB 就OK。
MongoDB 可以方便你去存储一些非结构化的数据,比如各种评论的文本,图片的链接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。
因为这里要用到的数据库知识其实非常简单,主要是数据如何入库、如何进行提取,在需要的时候再学习就行。
- -
掌握各种技巧,应对特殊网站的反爬措施
当然,爬虫过程中也会经历一些绝望啊,比如被网站封IP、比如各种奇怪的验证码、userAgent访问限制、各种动态加载等等。
遇到这些反爬虫的手段,当然还需要一些高级的技巧来应对,常规的比如访问频率控制、使用代理IP池、抓包、验证码的OCR处理等等。
往往网站在高效开发和反爬虫之间会偏向前者,这也为爬虫提供了空间,掌握这些应对反爬虫的技巧,绝大部分的网站已经难不到你了。
- -
分布式Python爬虫,实现大规模并发采集
爬取基本数据已经不是问题了,你的瓶颈会集中到爬取海量数据的效率。这个时候,相信你会很自然地接触到一个很厉害的名字:分布式爬虫。
分布式这个东西,听起来很恐怖,但其实就是利用多线程的原理让多个爬虫同时工作,需要你掌握 Scrapy + MongoDB + Redis 这三种工具。
Scrapy 前面我们说过了,用于做基本的
2. 使用爬虫爬取数据违法吗
爬虫不违法,违法的是不遵从网站的爬虫协议,对网站造成负担,对正常用户造成影响。
其次,搜索引擎也是爬虫,爬虫协议就是告诉爬虫怎么爬取可以。
最后,没有官方接口或者已经下架的接口,爬取这些信息肯定是违法的,轻重而已;
当然这是法律意义的,实际上爬虫到底违法不违法,看看案例就知道了。不对对方造成损失,不侵犯未公开接口,就没有问题。
3. 爬虫数据采集违法吗
可能违法。其爬虫下载数据,一般而言都不违法,因为爬虫爬取的数据同行也是网站上用户打开页面能够看到的数据,但是如果符合下列条件的网站进行强行数据采集时,会具有法律风险。可能会造成侵犯隐私权的违法行为。
网络爬虫是什么意思?
这些“爬虫”按照特定程序,沿着一定的路径,模拟人工操作,从网站、应用程序等终端呈现的平台上去提取和存储数据。随着大数据等技术的发展,网络爬虫的影响力逐渐增加,不仅爬数、甚至于抢票、盗号、供给计算机系统等,也都有爬虫的身影,而使得它渐渐进入公众视野。随之而来的也是关于爬虫技术侵权边界的探讨。
爬虫的类型也有很多。举个例子,按照系统结构和实现技术,就能将爬虫分为通用网络爬虫(不讲究优先级,把网络的内容都爬下来)、聚焦网络爬虫(只爬预先设定好的主题相关的页面)、增量式网络爬虫(只爬新的网页,或者发生变化的网页)、深层网络爬虫(访问深层网页)。
我们一般见到的爬虫也是爬取数据用的。这类爬虫其实就做了两项工作:
1、获取网页源代码;
2、从网页源代码中解析和提取所需要的数据。很多反爬技术都是针对的第一项工作,阻止你通过爬虫获取到源代码,而只要获取了源代码,解析和提取数据的方法就非常多样,可以说,拿到源代码时爬数的工作算是完成一大半了。
法律依据:《中华人民共和国民法典》 第一百一十条 自然人享有生命权、身体权、健康权、姓名权、肖像权、名誉权、荣誉权、隐私权、婚姻自主权等权利。法人、非法人组织享有名称权、名誉权和荣誉权。
4. Python3.xx中写爬虫,下载图片除了urlretrieve方法,还有什么库的什么方法呢
Part 1. urllib2
urllib2是Python标准库提供的与网络相关的库,是写爬虫最常用的一个库之一。
想要使用Python打开一个网址,最简单的操作即是:
your_url = "http://publicdomainarchive.com/"html = urllib2.urlopen(your_url).read()12
这样所获得的就是对应网址(url)的html内容了。
但有的时候这么做还不够,因为目前很多的网站都有反爬虫机制,对于这么初级的代码,是很容易分辨出来的。例如本文所要下载图片的网站http://publicdomainarchive.com/,上述代码会返回HTTPError: HTTP Error 403: Forbidden错误。
那么,在这种情况下,下载网络图片的爬虫(虽然只有几行代码,但一个也可以叫做爬虫了吧,笑),就需要进一步的伪装。
要让爬虫伪装成浏览器访问指定的网站的话,就需要加入消息头信息。所谓的消息头信息就是在浏览器向网络服务器发送请求时一并发送的请求头(Request Headers)信息和服务器返回的响应头(Response Headers)信息。
例如,使用FireFox打开http://publicdomainarchive.com/时所发送的Request Headers的部分内容如下:
Host:"publicdomainarchive.com/"User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"...1234
还有一些其他属性,但其中伪装成浏览器最重要的部分已经列出来了,即User-Agent信息。
要使用Headers信息,就不能再仅仅向urlopen方法中传入一个地址了,而是需要将HTTP Request的Headers封装后传入:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}req = urllib2.Request(url = url, headers = headers)content = urllib2.urlopen(req).read()123
这样,就获得了网站的html内容。
接下来,就需要从html去获取图片的链接。
Part 2. HTMLParser
HTMLParser是Python提供的HTML解析库之一。
但Python提供的这个类中很多方法都没有实现,因而基本上这个库只负责进行解析,但解析完了什么都不做。所以如果需要对HTML中的某些元素进行加工的话,就需要用户自己去实现其中的一些方法。本文仅实现其中的handle_starttag方法:
class MyHTMLParser(HTMLParser): #继承HTMLParser类
def __init__(self): #初始化
HTMLParser.__init__(self) def handle_starttag(self, tag, attrs):
#参数tag即由HTMLParser解析出的开始标签,attrs为该标签的属性
if tag == "img": #下载图片所需要的img标签
if len(attrs) == 0: pass
else: for (variable, value) in attrs: #在attrs中找到src属性,并确定其是我们所要下载的图片,最后将图片下载下来(这个方法当然也有其他的写法)
if variable == "src" and value[0:4] == 'http' and value.find('x') >= 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)123456789101112131415
Part 3. 下载图片
从handle_starttag方法中,我们已经获得了图片的url,那么,最后一步,我们要下载图片了。
当然,要获得网络上的图片,自然也需要向服务器发送请求,一样需要用到urllib2这个库,也需要用到上面所用到的请求头。
以下是down_image()方法的主要代码:
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()1234
因为这次打开的网址是个图片,所以urllib2.urlopen(req).read()所获取的就是图片的数据,将这些数据需要以二进制的方式写入本地的图片文件,即将图片下载下来了。
因为图片的url的最后一部分是图片的名字,所以可以直接用做本地的文件名,不用担心命名冲突,也不用担心后缀不符,很是方便。
Part 4. getFreeImages.py
这个下载图片的脚本的完整代码如下:
import urllib2,osfrom HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self) #self.links = {}
def handle_starttag(self, tag, attrs):
#print "Encountered the beginning of a %s tag" % tag
if tag == "img": if len(attrs) == 0: pass
else: for (variable, value) in attrs: if variable == "src" and value[0:4] == 'http' and value.find('x') >= 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)def down_image(url,file_name):
global headers
req = urllib2.Request(url = url, headers = headers)
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()if __name__ == "__main__":
img_dir = "D:\\Downloads\\domain images"
if not os.path.isdir(img_dir):
os.mkdir(img_dir)
os.chdir(img_dir) print os.getcwd()
url = ""
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}
all_links = []
hp = MyHTMLParser() for i in range(1,30):
url = 'http://publicdomainarchive.com/public-domain-images/page/' + str(i) + '/'
req = urllib2.Request(url = url, headers = headers)
content = urllib2.urlopen(req).read()
hp.feed(content)
hp.close()041424344454647484950
5. 网络爬虫抓取数据 有什么好的应用
一般抓数据的话可以学习Python,但是这个需要代码的知识。
如果是没有代码知识的小白可以试试用成熟的采集器。
目前市面比较成熟的有八爪鱼,后羿等等,但是我个人习惯八爪鱼的界面,用起来也好上手,主要是他家的教程容易看懂。可以试试。
6. 网络爬虫可以爬取数据库里的数据嘛
只会抓取页面,,当然页面里你会读取到数据库数据。。
所以它不算是抓取你数据库,只是你用在了页面上,生成了结果 ,
它抓取你这个结果。。。
其实想想也是知道的,,数据库除了开发者对程序授权,别人怎么可以操作得到数据库,要不然那不是天下大乱了嘛。。。
7. 入门爬虫下载Python还要下载单独的编译器如pycharm直接用IELD(Python)不行吗
可以
但是自带的不好用
8. 网络爬虫,用什么软件最好啊
前嗅ForeSpider数据采集系统是天津市前嗅网络科技有限公司自主知识产权的通用性互联网数据采集软件。软件具备全面的采集范围、精准的数据精度、绝佳的抓取性能、简易的可视化操作、智能的自动化采集,使企业能够以很少的人工成本,快速获取互联网中结构化或非结构化的数据。
软件几乎可以采集互联网上所有公开的数据,通过可视化的操作流程,从建表、过滤、采集到入库一步到位。支持正则表达式操作,更有强大的面向对象的脚本语言系统。
台式机单机采集能力可达4000-8000万,日采集能力超过500万。服务器单机集群环境的采集能力可达8亿-16亿,日采集能力超过4000万。并行情况下可支撑百亿以上规模数据链接,堪与网络等搜索引擎系统媲美。
l软件特点
一.通用性:可以抓取互联网上几乎100 %的数据
1.支持数据挖掘功能,挖掘全网数据。
2.支持用户登录。
3.支持Cookie技术。
4.支持验证码识别。
5.支持HTTPS安全协议。
6.支持OAuth认证。
7.支持POST请求。
8.支持搜索栏的关键词搜索采集。
9.支持JS动态生成页面采集。
10.支持IP代理采集。
11.支持图片采集。
12.支持本地目录采集。
13.内置面向对象的脚本语言系统,配置脚本可以采集几乎100%的互联网信息。
二.高质量数据:采集+挖掘+清洗+排重一步到位
1.独立知识产权JS引擎,精准采集。
2.集成数据挖掘功能,可以精确挖掘全网关键词信息。
3.内部集成数据库,数据直接采集入库,入库前自动进行两次数据排重。
4.内部创建数据表结构,抓取数据后直接存入数据库相应字段。
5.根据dom结构自动过滤无关信息。
6.通过模板配置链接抽取和数据抽取,目标网站的所有可见内容均可采集,智能过滤无关信息。
7.采集前数据可预览采集,随时调整模板配置,提升数据精度和质量。
8.字段的数据支持多种处理方式。
9.支持正则表达式,精准处理数据。
10.支持脚本配置,精确处理字段的数据。
三.高性能:千万级的采集速度
1.C++编写的爬虫,具备绝佳采集性能。
2.支持多线程采集。
3.台式机单机采集能力可达4000-8000万,日采集能力超过500万。
4.服务器单机集群环境的采集能力可达8亿-16亿,日采集能力超过4000万。
5.并行情况下可支撑百亿以上规模数据链接,堪与网络等搜索引擎系统媲美。
6.软件性能稳健,稳定性好。
四.简易高效:节约70%的配置时间
1.完全可视化的配置界面,操作流程顺畅简易。
2.基本不需要计算机基础,代码薄弱人员也可快速上手,降低操作门槛,节省企业爬虫工程师成本。
3.过滤采集入库一步到位,集成表结构配置、链接过滤、字段取值、采集预览、数据入库。
4.数据智能排重。
5.内置浏览器,字段取值直接在浏览器上可视化定位。
五.数据管理:多次排重
1.内置数据库,数据采集完毕直接存储入库。
2.在软件内部创建数据表和数据字段,直接关联数据库。
3.采集数据时配置数据模板,网页数据直接存入对应数据表的相应字段。
4.正式采集之前预览采集结果,有问题及时修正配置。
5.数据表可导出为csv格式,在Excel工作表中浏览。
6.数据可智能排除,二次清洗过滤。
六.智能:智能模拟用户和浏览器行为
1.智能模拟浏览器和用户行为,突破反爬虫限制。
2.自动抓取网页的各类参数和下载过程的各类参数。
3.支持动态IP代理加速,智能过滤无效IP代理,提升代理的利用效率和采集质量。
4.支持动态调整数据抓取策略,多种策略让您的数据无需重采,不再担心漏采,数据采集更智能。
5.自动定时采集。
6.设置采集任务条数,自动停止采集。
7.设置文件大小阈值,自动过滤超大文件。
8.自由设置浏览器是否加速,自动过滤页面的flash等无关内容。
9.智能定位字段取值区域。
10.可以根据字符串特征自动定位取值区域。
11.智能识别表格的多值,表格数据可以完美存入相应字段。
七.优质服务
1.数据采集完全在本地进行,保证数据安全性。
2.提供大量免费的各个网站配置模板在线下载,用户可以自由导入导出。
3.免费升级后续不断开发的更多功能。
4.为用户提供各类高端定制化服务,全方位来满足用户的数据需求。
9. 可以使用本地编译器吗
你可以把你的win7家庭版升级到旗舰版,我刚买的笔记本就是这样升级的。