python爬虫】python涉及到爬虫吗?

2020-03-26 13:43发布

4条回答
飞得快
2楼 · 2020-03-27 09:44

爬虫是python的一个使用方向,包含网页数据爬取和手机app数据爬取。爬下来数据之后,还有数据存储和清洗等工作要做。爬虫程序代码编写完成,还需要进行部署、启动、暂停、维护等一系列工作。现在是大数据人工智能时代,大数据的主要来源之一就是爬虫。因此,爬虫岗位的需求量也比较大,毕竟任何企业都需要数据啊

Naughty
3楼 · 2020-10-20 09:21





Python爬虫开发从入门到实战(微课版)


第1章绪论

爬虫的主要目的是获取网页内容并解析。只要能达到这个目的,用什么方法都没有问题。

关于获取网页,本书主要介绍了Python的两个第三方模块,一个是requests,另一个是爬虫框架Scrapy。

关于解析网页内容,本书主要介绍了3种方式——正则表达式、XPath和BeautifulSoup。两种网页获取方式和3种网页解析方式可以自由搭配,随意使用。


第2章Python基础


知识点


Python开发环境的搭建。Python的基本知识、数据类型。Python的条件语句和循环语句。Python函数的定义和使用。基于Python的面向对象编程代码。


第3章正则表达式与文件操作


知识点


正则表达式的基本符号。如何在Python中使用正则表达式。正则表达式的提取技巧。Python读写文本文件和CSV文件。


第4章简单的网页爬虫开发


知识点


requests的安装和使用。多线程爬虫的开发。爬虫的常见算法。


多线程爬虫的开发


在掌握了requests与正则表达式以后,就可以开始实战爬取一些简单的网址了。

但是,此时的爬虫只有一个进程、一个线程,因此称为单线程爬虫。单线程爬虫每次只访问一个页面,不能充分利用计算机的网络带宽。一个页面最多也就几百KB,所以爬虫在爬取一个页面的时候,多出来的网速和从发起请求到得到源代码中间的时间都被浪费了。

如果可以让爬虫同时访问10个页面,就相当于爬取速度提高了10倍。为了达到这个目的,就需要使用多线程技术了。

微观上的单线程,在宏观上就像同时在做几件事。这种机制在I/O(Input/Output,输入/输出)密集型的操作上影响不大,但是在CPU计算密集型的操作上面,由于只能使用CPU的一个核,就会对性能产生非常大的影响。所以涉及计算密集型的程序,就需要使用多进程,Python的多进程不受GIL的影响。

由于爬虫是I/O密集型的操作,特别是在请求网页源代码的时候,如果使用单线程来开发,会浪费大量的时间来等待网页返回,所以把多线程技术应用到爬虫中,可以大大提高爬虫的运行效率。


多进程库(multiprocessing)


multiprocessing本身是Python的多进程库,用来处理与多进程相关的操作。但是由于进程与进程之间不能直接共享内存和堆栈资源,而且启动新的进程开销也比线程大得多,因此使用多线程来爬取比使用多进程有更多的优势。multiprocessing下面有一个dummy模块,它可以让Python的线程使用multiprocessing的各种方法。

dummy下面有一个Pool类,它用来实现线程池。这个线程池有一个map()方法,可以让线程池里面的所有线程都“同时”执行一个函数。

frommultiprocessing.dummyimportPoolasThreadPool


#使用map实现多线程爬虫

pool=ThreadPool(4)

pool.map(crawler_func,data_list)

pool.close()

pool.join()



常见搜索算法


DFSBFS

在爬虫开发的过程中,应该选择深度优先还是广度优先呢?这就需要根据被爬取的数据来进行选择了。


小结


本章讲解了requests的安装和使用,以及如何使用Python的多进程库multiprocessing来实现多线程爬虫。


第5章高性能HTML内容解析


知识点


HTML基础结构。使用XPath从HTML源代码中提取有用信息。使用BeautifulSoup4从HTML源代码中提取有用信息。


BeautifulSoup4


BeautifulSoup4(BS4)是Python的一个第三方库,用来从HTML和XML中提取数据。

pipinstallbeautifulsoup4



小结


从网页中提取需要的信息,是爬虫开发中最重要但却最基本的操作。只有掌握并能自由运用正则表达式、XPath与BeautifulSoup4从网页中提取信息,爬虫的学习才算是入门。

XPath是一门查询语言,它由C语言开发而来,因此速度非常快。但是XPath需要经过一段时间的练习才能灵活应用。

BeautifulSoup4是一个从网页中提取数据的工具,它入门很容易,功能很强大,但是由于是基于Python开发的,因此速度比XPath要慢。读者可以自行选择喜欢的一项来作为自己主要的数据提取方式。本书选择使用XPath,所以后面的内容都会以XPath来进行讲解。


第6章Python与数据库


数据库


本章将会讲解MongoDB和Redis这两个数据库。其中MongoDB用来保存大量数据,Redis用于作为缓存和队列保存临时数据。


知识点


MongoDB与Redis的安装。MongoDB的增删改查操作。Redis的列表与集合的操作。


在MacOS下安装MongoDB


brewupdate

brewinstallmongodb

#启动MongoDB

mongod--config/usr/local/etc/mongod.conf



图形化管理工具—RoboMongo


RoboMongo是一个跨平台的MongoDB管理工具,可以在图形界面中查询或者修改MongoDB。

数据在MongoDB中是按照“库(Database)”—“集合(Collections)”—“文档(Document)”的层级关系来存储的。如果使用Python的数据结构来做类比的话,文档相当于一个字典,集合相当于一个包含了很多字典的列表,库相当于一个大字典,大字典里面的每一个键值对都对应了一个集合,Key为集合的名字,Value就是一个集合。


PyMongo的安装


PyMongo模块是Python对MongoDB操作的接口包,能够实现对MongoDB的增删改查及排序等操作。

pipinstallpymongo



PyMongo的使用


(1)使用PyMongo初始化数据库

要使用PyMongo操作MongoDB,首先需要初始化数据库连接。如果MongoDB运行在本地计算机上,而且也没有修改端口或者添加用户名及密码,那么初始化MongoClient的实例的时候就不需要带参数,直接写为:


frompymongoimportMongoClient

client=MongoClient()



如果MongoDB是运行在其他服务器上面的,那么就需要使用“URI(UniformResourceIdentifier,统一资源标志符)”来指定连接地址。MongoDBURI的格式为:

mongodb://用户名:密码@服务器IP或域名:端口



PyMongo初始化数据库与集合有两种方式。

#方式1:

frompymongoimportMongoClient

client=MongoClient()

database=client.Chapter6

collection=database.spider

#需要注意,使用方式1的时候,代码中的“Chapter6”和“spider”都不是变量名,它们直接就是库的名字和集合的名字。


#方式2:

frompymongoimportMongoClient

client=MongoClient()

database=client['Chapter6']

collection=database['spider']


#使用方式2时,在方括号中指定库名和集合名。这种情况下,方括号里除了直接写普通的字符串以外,还可以写一个变量。


默认情况下,MongoDB只允许本机访问数据库。这是因为MongoDB默认没有访问密码,出于安全性的考虑,不允许外网访问。

如果需要从外网访问数据库,那么需要修改安装MongoDB时用到的配置文件mongod.conf。

(2)插入数据

MongoDB的插入操作非常简单。用到的方法为insert(参数),插入的参数就是Python的字典。插入一条数据的代码如下。

frompymongoimportMongoClient

client=MongoClient()

database=client['Chapter6']

collection=database['spider']

data={'id':123,'name':'kingname','age':20,'salary':999999}

collection.insert(data)


#MongoDB会自动添加一列“_id”,这一列里面的数据叫作ObjectId,ObjectId是在数据被插入MongoDB的瞬间,通过一定的算法计算出来的。因此,_id这一列就代表了数据插入的时间,它不重复,而且始终递增。通过一定的算法,可以把ObjectId反向恢复为时间。



将多个字典放入列表中,并将列表作为insert()方法的参数,即可实现批量插入数据,代码如下。

frompymongoimportMongoClient

client=MongoClient()

database=client['Chapter6']

collection=database['spider']

more_data=[

{'id':2,'name':'张三','age':10,'salary':0},

{'id':3,'name':'李四','age':30,'salary':-100},

{'id':4,'name':'王五','age':40,'salary':1000},

{'id':5,'name':'外国人','age':50,'salary':'未知'},

]

collection.insert(more_data)


(3)普通查找

MongoDB的查找功能对应的方法是:

find(查询条件,返回字段)

find_one(查询条件,返回字段)



普通查询方法有以下3种写法。

content=collection.find()

content=collection.find({'age':29})

content=collection.find({'age':29},{'_id':0,'name':1,'salary':1})


(4)逻辑查询

PyMongo也支持大于、小于、大于等于、小于等于、等于、不等于这类逻辑查询。

collection.find({'age':{'$gt':29}})#查询所有age>29的记录

collection.find({'age':{'$gte':29,'$lte':40}})#查询29≤age≤40的记录

collection.find({'salary':{'$ne:29}})#查询所有salary不等于29的记录


(5)对查询结果排序

#MongoDB支持对查询到的结果进行排序。排序的方法为sort()。它的格式为:

handler.find().sort('列名',1或-1)


#查询一般和find()配合在一起使用。例如:

collection.find({'age':{'$gte':29,'$lte':40}}).sort('age',-1)

collection.find({'age':{'$gte':29,'$lte':40}}).sort('age',1)


(6)更新记录

更新可使用update_one()和update_many()方法。它们的格式为:

collection.update_one(参数1,参数2)

collection.update_many(参数1,参数2)



(7)删除记录

删除可使用delete_one()和delete_many()方法。它们的格式为:

collection.delete_one(参数)

collection.delete_many(参数)



(8)对查询结果去重

去重使用distinct()方法,其格式为:


collection.distinct('列名')




设计一个开关


思考一个问题:如何设计一个开关,实现在不结束程序进程的情况下,从全世界任何一个有网络的地方既能随时暂停程序,又能随时恢复程序的运行。

最简单的方法就是用数据库来实现。在能被程序和控制者访问的服务器中创建一个数据库,数据库名为“Switch_DB”。数据库里面创建一个集合“Switch”,这个集合里面只有一个记录,就是“Status”,它只有两个值,“On”和“Off”,


在MacOS下安装Redis


brewupdate

brewinstallredis

#运行Redis

redis-server/usr/local/etc/redis.conf



Redis交互环境的使用


redis-cli



常见操作


keys*可以查看当前有多少的“Key”。

在爬虫开发的过程中主要会用到Redis的列表与集合

(1)列表

Redis的列表是一个可读可写的双向队列

lpushkeyvalue1value2value3…


如果想查看一个列表的长度,可使用关键字为“llen”。这个关键字的第1个“l”对应的是英文“list”(列表)的首字母。

如果不删除列表中的数据,又要把数据读出来,就需要使用关键字“lrange”,这里的“l”对应的是英文“list”的首字母。”lrange”的使用格式为:

lrangekeystartend

#其中,start为起始位置,end为结束位置。例如:

lrangechapter_603


#需要特别注意的是,在Python中,切片是左闭右开区间,例如,test[0:3]表示读列表的第0、1、2个共3个值。但是lrange的参数是一个闭区间,包括开始,也包括结束,因此在图6-35中会包含下标为0、1、2、3的4个值。


(2)集合

Redis的集合与Python的集合一样,没有顺序,值不重复。往集合中添加数据,使用的关键字为“sadd”。这里的“s”对应的是英文单词“set”(集合)。使用格式为:

saddkeyvalue1value2value3



安装Redis-py


pipinstallredis



MongoDB的优化建议


少读少写少更新

建议把要插入到MongoDB中的数据先统一放到一个列表中,等积累到一定量再一次性插入。对于读数据,在内存允许的情况下,应该一次性把数据读入内存,尽量减少对MongoDB的读取操作。在某些情况下,更新操作不得不逐条进行。建议,把更新这个动作改为插入。这样就可以实现批量更新的效果了。具体来说,就是把数据批量插入到一个新的MongoDB集合中,再把原来的集合删除,最后将新的集合改为原来集合的名字。


能用Redis就不用MongoDB


为了提高效率,就需要引入Redis。由于Redis是基于内存的数据库,因此即使频繁对其读/写,对性能的影响也远远小于频繁读/写MongoDB。在Redis中创建一个集合“crawled_url”,爬虫在爬一个网址之前,先把这个网址sadd到这个集合中。如果返回为1,那么表示这个网址之前没有爬过,爬虫需要去爬取详情页。如果返回0,表示这个网址之前已经爬过了,就不需要再爬了。示例代码片段如下:

forurlinurl_list:#url_list为在贴吧列表页得到的每一个帖子的详情页网址列表

ifclient.sadd('crawled_url',url)==1:

crawl(url)



练习


目标网站:http://dongyeguiwu.zuopinj.com/5525/。

目标内容:小说《白夜行》第一章到第十三章的正文内容。

任务要求:编写两个爬虫,爬虫1从http://dongyeguiwu.zuopinj.com/5525/获取小说《白夜行》第一章到第十三章的网址,并将网址添加到Redis里名为url_queue的列表中。爬虫2从Redis里名为url_queue的列表中读出网址,进入网址爬取每一章的具体内容,再将内容保存到MongoDB中。

#1使用XPath获取每一章的网址,再将它们添加到Redis中。其核心代码如下:

url_list=selector.xpath('//div[@class="book_list"]/ul/li/a/@href')

forurlinurl_list:

client.lpush('url_queue',url)


#2对于爬取正文的爬虫,只要发现Redis里的url_queue这个列表不为空,就要从里面读出网址,并爬取数据。因此,其代码如下:

content_list=[]

whileclient.llen('url_queue')>0:

url=client.lpop('url_queue').decode()

source=requests.get(url).content


selector=html.fromstring(source)

chapter_name=selector.xpath('//div[@class="h1title"]/h1/text()')[0]

content=selector.xpath('//div[@id="htmlContent"]/p/text()')

content_list.append({'title':chapter_name,'content':''.join(content)})

handler.insert(content_list)





调试与运行


爬虫1运行结束以后,Redis中应该会出现一个名为url_queue的列表,执行以下代码:


llenurl_queue



爬虫2运行结束以后,Redis中的url_queue会消失,同时MongoDB中会保存小说每一章的内容。


小结


本章主要讲解了MongoDB与Redis的使用。其中,MongoDB主要用来存放爬虫爬到的各种需要持久化保存的数据,而Redis则用来存放各种中间数据。

通过减少频繁读/写MongoDB,并使用Redis来弥补MongoDB的一些不足,可以显著提高爬虫的运行效率。


动手实践


如果爬虫1把10000个网址添加到url_queue中,爬虫2同时运行在3台计算机上,请观察能实现什么效果。


第7章异步加载与请求头


知识点


抓取异步加载的数据。伪造HTTP请求头。模拟浏览器获取网站数据。


AJAX版登录页面的爬取


通过POST提交请求解决了AJAX版登录页面的爬取


小结


本章主要介绍了使用爬虫获取异步加载网页的各种方法。对于普通的异步加载,可以使用requests直接发送AJAX请求来获取被加载的内容。

发送的请求中可能包含一些特殊的值,这些值来自网页源代码或者另一个AJAX请求。

在发送请求时需要注意,应保持requests提交的请求头与浏览器的请求头一致,这样才能更好地骗过网站服务器达到获取数据的目的。

对于比较复杂的异步加载,现阶段可以先使用Selenium和ChromeDriver来直接加载网页,然后就能从被加载的网页中直接获取到需要的内容。


第8章模拟登录与验证码


知识点


使用Selenium操作浏览器实现自动登录网站。使用Cookies登录网站。模拟表单登录网站。爬虫识别简单的验证码。


模拟登录有多种实现方法


使用Selenium操作浏览器登录使用Cookies登录虽然简单粗暴使用模拟提交表单登录虽然较为麻烦,但可以实现自动化


使用Cookies登录


Cookie是用户使用浏览器访问网站的时候网站存放在浏览器中的一小段数据。Cookie的复数形式Cookies用来表示各种各样的Cookie。它们有些用来记录用户的状态信息;有些用来记录用户的操作行为;还有一些,具有现代网络最重要的功能:记录授权信息——用户是否登录以及用户登录哪个账号。

为了不让用户每次访问网站都进行登录操作,浏览器会在用户第一次登录成功以后放一段加密的信息在Cookies中。下次用户访问,网站先检查Cookies有没有这个加密信息,如果有并且合法,那么就跳过登录操作,直接进入登录后的页面。

使用Cookie来登录网页,不仅可以绕过登录步骤,还可以绕过网站的验证码。

使用了requests的Session模块。

所谓Session,是指一段会话。网站会把每一个会话的ID(SessionID)保存在浏览器的Cookies中用来标识用户的身份。requests的Session模块可以自动保存网站返回的一些信息。其实在前面章节中使用的requests.get(),在底层还是会先创建一个Session,然后用Session去访问。

对于HTTPS的网站,在requests发送请求的时候需要带上verify=False这个参数,否则爬虫会报错。

带上这个参数以后,爬虫依然会报一个警告,这是因为没有HTTPS的证书。

对于HTTPS的网站,在requests发送请求的时候需要带上verify=False这个参数,否则爬虫会报错。


模拟表单登录


通过POST提交请求解决了AJAX版登录页面的爬取。但是在现实中,有更多的网站是使用表单提交的方式来进行登录的。

使用requests的Session模块来模拟这个登录


验证码-肉眼打码


1.借助浏览器

在模拟登录中讲到过Cookies,通过Cookies能实现绕过登录,从而直接访问需要登录的网站。因此,对于需要输入验证码才能进行登录的网站,可以手动在浏览器登录网站,并通过Chrome获取Cookies,然后使用Cookies来访问网站。这样就可以实现人工输入一次验证码,然后很长时间不再登录。

2.不借助浏览器

对于仅仅需要识别图片的验证码,可以使用这种方式——先把验证码下载到本地,然后肉眼去识别并手动输入给爬虫。


验证码-自动打码


1.Python图像识别

Python的强大,在于它有非常多的第三方库。对于验证码识别,Python也有现成的库来使用。开源的OCR库pytesseract配合图像识别引擎tesseract,可以用来将图片中的文字转换为文本。这种方式在爬虫中的应用并不多见。因为现在大部分的验证码都加上了干扰的纹理,已经很少能用单机版的图片识别方式来识别了。所以如果使用这种方式,只有两种情况:网站的验证码极其简单工整,使用大量的验证码来训练tesseract。

(1)安装tesseract


brewinstalltesseract



(2)安装Python库

要使用tesseract来进行图像识别,需要安装两个第三方库:


pipinstallPillow


pipinstallpytesseract


#其中,Pillow是Python中专门用来处理图像的第三方库,pytesseract是专门用来操作tesseract的第三方库。


(3)tesseract的使用

①导入pytesseract和Pillow。

②打开图片。

③识别。

importpytesseract

fromPILimportImage

image=Image.open('验证码.png')

code=pytesseract.image_to_string(image)

print(code)


2.打码网站

(1)打码网站介绍

在线验证码识别的网站,简称打码网站。这些网站有一些是使用深度学习技术识别验证码,有一些是雇佣了很多人来人肉识别验证码。

网站提供了接口来实现验证码识别服务。使用打码网站理论上可以识别任何使用输入方式来验证的验证码。

(2)使用在线打码

百度或者谷歌上面搜索“验证码在线识别”,就可以找到很多提供在线打码的网站。但是由于一般这种打码网站是需要交费才能使用的,所以要注意财产安全。

云打码


练习:自动登录果壳网


目标网站:https://www.guokr.com。

目标内容:个人资料设置界面源代码。

使用模拟登录与验证码识别的技术实现自动登录果壳网。果壳网的登录界面有验证码,请使用人工或者在线打码的方式识别验证码,并让爬虫登录。登录以后可以正确显示“个人资料设置”界面的源代码。

涉及的知识点:

爬虫识别验证码。爬虫模拟登录。


小结


本章主要讲授了模拟登录与验证码识别。使用Selenium实现模拟登录最为简单。但是这种方式的弊端是运行速度慢。

使用Cookies登录可以实现一次手动、长期自动的目的。

而模拟表单登录本质就是发起POST请求来进行登录,需要使用Session模块来保存登录信息。

验证码识别主要是使需输入的验证码实现自动化。包括手动输入与在线打码。对于单击、拖动的验证码,建议使用Cookies来进行登录。


第9章抓包与中间人爬虫


知识点


使用Charles抓取App和微信小程序的数据包。使用mitmproxy开发中间人爬虫。


数据抓包


所谓抓包(PackageCapture),简单来说,就是在网络数据传输的过程中对数据包进行截获、查看、修改或转发的过程。

如果把网络上发送与接收的数据包理解为快递包裹,那么在快递运输的过程中查看里面的内容,这就是抓包。


Charles


要简化寻找数据的过程,就需要设法直接全局搜索网页的所有请求的返回数据。

为了实现这个目的,就需要使用Charles。Charles是一个跨平台的HTTP抓包工具。使用它可以像Chrome一样截取HTTP或者HTTPS请求的数据包。


抓取HTTPS数据包


用Charles抓取HTTPS数据包时的请求会大量失败。出现这种情况,是因为没有安装SSL证书导致的。

第一步,安装好证书:要安装SSL证书,可选择菜单栏的“Help”-“SSLProxying”-“InstallCharlesRootCertificate”命令。

第二步,设置SSL代理:安装好证书以后,选择菜单栏中的“Proxy”-“SSLProxyingSettings”命令打开SSL代理设置对话框。


iOS系统的配置和使用


对于苹果设备,首先要保证计算机和苹果设备联在同一个Wi-Fi上。选择Charles菜单栏中的“Help”-“LocalIPAddress”命令,此时弹出一个对话框,显示当前计算机的内网IP地址。

接下来设置手机。进入系统设置,选择“无线局域网”,然后单击已经连接的这个Wi-Fi热点右侧的圆圈包围的字母i的图标。

第一步,在手机上设置HTTP代理。

第二步,使用iOS系统自带的Safari浏览器访问https://chls.pro/ssl。安装证书。

第三步,证书信任设置


Android的配置和使用


将Charles的证书保存到计算机桌面


微信小程序爬虫


小程序的请求极其简单,基本上没有验证信息,即便有验证信息也非常脆弱。

用Python来请求小程序的后台接口从而获取数据,比请求异步加载网页的后台接口要容易很多。

在爬虫开发过程中,如果目标网站有微信小程序,那么一定要优先调查能否通过小程序的接口来抓取数据。

小程序的反爬虫能力比网页版的低很多。使用小程序的接口来爬数据,能极大提高爬虫的开发效率。


Charles的局限


Charles只能截获HTTP和HTTPS的数据包,如果网站使用的是websocket或者是flashsocket,那么Charles就无能为力。有一些App会自带证书,使用其他证书都无法正常访问后台接口。在这种情况下,Charles自带的证书就不能正常使用,也就没有办法抓取这种App的数据。有一些App的数据经过加密,App接收到数据以后在其内部进行解密。对于这种情况,Charles只能抓取到经过加密的数据。如果无法知道数据的具体加密方法,就没有办法解读Charles抓取到的数据。


中间人爬虫


中间人(Man-in-the-Middle,MITM)攻击是指攻击者与通信的两端分别创建独立的联系,并交换其所收到的数据,使通信的两端认为其正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。

在中间人攻击中,攻击者可以拦截通信双方的通话,并插入新的内容或者修改原有内容。

例如:上课传纸条

中间人爬虫就是利用了中间人攻击的原理来实现数据抓取的一种爬虫技术。

数据抓包就是中间人爬虫的一个简单应用。所以使用Charles也是一种中间人攻击。


mitmproxy的介绍和安装


要安装mitmproxy,首先需要保证系统的Python为Python3.5或者更高版本

brewinstallmitmproxy



mitmproxy使用


运行mitmproxy会弹出对话框询问

mitmproxy


mitmproxy的端口为8080端口,在浏览器或者在手机上设置代理,代理IP为计算机IP,端口为8080端口。设置好代理以后,在手机上打开一个App或者打开一个网页,可以看到mitmproxy上面有数据滚动。此时只能访问HTTP网站,要访问HTTPS网站,还需要安装mitmproxy的证书。在手机

撸串儿去不
4楼 · 2021-04-07 20:59

是的,会涉及到爬虫的,而且爬虫也是python的重点工作方向之一

yuixan
5楼 · 2021-11-01 09:48

python是一门很全面的编程语言,可以完成大多数语言都能完成的工作,而且它是解析性语言,方便修改和移植,网络爬虫和数据分析只是他比较突出的应用领域而已。学习python的时候刚开始都会涉及其他语言所涉及的简单的操作,用以传达语言的编辑技巧,不会涉及网络知识,更谈不上写爬虫和数据分析。到了后期,你比较熟悉它的使用技巧后,可以因应自己的需求学习网络爬虫的制作或者数据挖掘方面的技术。总之一句话,python可以做很多,其中最适合做爬虫和数据分析。

相关问题推荐

  • 回答 5

    现在是大数据人工智能时代,数据是核心资源。但大部分企业是没有数据的,或者数据很少。要得到数据,要么花钱购买,要么使用爬虫进行爬取。所以,爬虫是大数据和人工智能的基础。这是智联招聘网站爬虫岗位最新的招聘信息。可以看出工资水平还是相当高的。在掌...

  • 回答 2

    爬虫也是python一个很重要的一个应用方向,那么爬虫需要哪些知识呢?1 要具备扎实的python语法基础,这是一切的根基2 对前端知识有一定的了解,起码做到能看懂3 如何获取目标数据:requests模块等4 如何解析目标数据:正则,xpath,jsonpath等5 如何做到做到...

  • 回答 3

    小伙伴们,大家好!这次来填坑了,关于前后端分离这个话题,我必须要交作业了,因为在私信里实在被问得太频繁了。前后端分离的开发模式,这两年确实被炒得如火如荼,导致这个话题也成了面试极其爱问的一个问题,尤其是换工作、跳槽,之前不管你是做后端,还是...

  • 回答 2

    转载请注明作者和出处:http://blog.csdn.net/c406495762Github代码获取:https://github.com/Jack-Cherish/python-spiderPython版本:Python3.x运行平台:WindowsIDE:Sublimetext3 更多教程,请查看:https://cuijiahua.com/blog/spider/ 一前言**强烈建议...

  • 回答 7

    代理ip网址http://www.goubanjia.com/http://www.ip181.com/https://www.kuaidaili.com/python 环境安装requests库安装bs4库proxies设置代理服务器地址proxies = {'http':  'http://61.155.164.110:3128'}http://www.goub......

  • 回答 2

    import  requestsimport  jsonfrom bs4 import BeautifulSoupfrom    urllib.request import urlretrieve#构造函数def sk():    #请求头    header={        'user-Agent':'Mozilla/5.0 (Windows NT 10.0; W...

  • 回答 3

    针对字符串中本身含有双引号,我们可以利用单引号进行字符串的定义来解决这个问题。使用单引号作为字符串的界限就不会引起识别异常问题,保证字符串的合理定义

  • 回答 1

    scrapy-redis可以

  • 回答 1

    简单理解就是去网上通过一定的技术手段获取想要的数据之类的,学习这个的话需要一定的Python知识基础不是能直接学的,需要一步一步的来

  • 回答 3

    爬虫框架中比较好用的是 Scrapy 和PySpider

  • 回答 2

    爬虫学起来挺简单的,需要自己多动手才行

  • 回答 3

    我目测不是在地上蛄蛹蛄蛹的虫子

  • 回答 1

    referer:有的源代码有,有的没有;它代表的是你是从哪个页面跳转到这个页面的,即:你的下一个页面。user-agent:每个源代码都有这一项;cookie:绝大部分是通过我们访问页面的时候给我们返回来的;urllib是不能进行反爬的;urllib模块可以提供进行urlencode的方...

没有解决我的问题,去提问