Ⅰ 从python基础到爬虫的书有什么值得推荐
入门:
《深入浅出 Python 》
《Python 编程从入门到实践》
爬虫:
《Python 网络数据采集》
《精版通 Python 网络爬虫》韦玮权
《Python3 网络爬虫实战》崔庆才
数据分析:
《利用 Python 进行数据分析》
《流畅的 python》
Ⅱ 如何用 beautifulsoup抓取js数据
代码函数如下:
foundTds = soup.findAll(name="td", attrs={"style":"text-align:right;"}, text=re.compile("\d+(,\d+)*\.\d+"));
# !!! here match only the match re.compile text, not whole td tag
print "foundTds=",foundTds; #foundTds= [u'', u'1,']
if(foundTds):
for eachMoney in foundTds:
print "eachMoney=",eachMoney;
# eachMoney= 2
# eachMoney= 1
if __name__ == "__main__":
beautifulsoup_capture_money();
Ⅲ python用beautifulSoup写爬虫的一点小问题
我就说说几点可能性,1是网腔手橡站针对爬虫程序生成了不同的页面代码,处理办法就是给 requests 请求加伪装浏览器UA头, 2是网站部分网页代码是异步JS获取的,这个情况可以考虑去抓取 AJAX 请求自身,或者伍旁使用 PhantomJS 处薯唯理动态内容哟
Ⅳ python爬虫求一个只用requests库和beautifulsoup库抓取淘宝目录页面内容的框架。。自己抓不出来。绝望。
可以将网页下载下来先练习 BeautifulSoup 的解析。
requests 请求也是一样先各个击破的学猜指亏习。
淘宝的请求回来的页面 html没有目录数据,是因为有可能他们的页面渲染穗神是通逗乎过 JS 来渲染的,所以你只用 BeautifulSoup 是不行的。需要使用其他支持 JS 的库。
Ⅳ python BeautifulSoup不能解析<script>...<script>之间的内容
什么意思?你是想把javascript产生的内容自动解析出来还是只提取出字符串中的内容.
Ⅵ Python课程内容都学习什么啊
这里整理了一份Python全栈开发的学习路线,要学习以下内容:
第一阶段:专业核心基础
阶段目标:
1. 熟练掌握Python的开发环境与编程核心知识
2. 熟练运用Python面向对象知识进行程序开发
3. 对Python的核心库和组件有深入理解
4. 熟练应用SQL语句进行数据库常用操作
5. 熟练运用Linux操作系统命令及环境配置
6. 熟练使用MySQL,掌握数据库高级操作
7. 能综合运用所学知识完成项目
知识点:
Python编程基础、Python面向对象、Python高级进阶、MySQL数据库、Linux操作系统。
1、Python编程基础,语法规则,函数与参数,数据类型,模块与包,文件IO,培养扎实的Python编程基本功,同时对Python核心对象和库的编程有熟练的运用。
2、Python面向对象,核心对象,异常处理,多线程,网络编程,深入理解面向对象编程,异常处理机制,多线程原理,网络协议知识,并熟练运用于项目中。
3、类的原理,MetaClass,下划线的特殊方法,递归,魔术方法,反射,迭代器,装饰器,UnitTest,Mock。深入理解面向对象底层原理,掌握Python开发高级进阶技术,理解单元测试技术。
4、数据库知识,范式,MySQL配置,命令,建库建表,数据的增删改查,约束,视图,存储过程,函数,触发器,事务,游标,PDBC,深入理解数据库管理系统通用知识及MySQL数据库的使用与管理。为Python后台开发打下坚实基础。
5、Linux安装配置,文件目录操作,VI命令,管理,用户与权限,环境配置,Docker,Shell编程Linux作为一个主流的服务器操作系统,是每一个开发工程师必须掌握的重点技术,并且能够熟练运用。
第二阶段:PythonWEB开发
阶段目标:
1. 熟练掌握Web前端开发技术,HTML,CSS,JavaScript及前端框架
2. 深入理解Web系统中的前后端交互过程与通信协议
3. 熟练运用Web前端和Django和Flask等主流框架完成Web系统开发
4. 深入理解网络协议,分布式,PDBC,AJAX,JSON等知识
5. 能够运用所学知识开发一个MiniWeb框架,掌握框架实现原理
6. 使用Web开发框架实现贯穿项目
知识点:
Web前端编程、Web前端高级、Django开发框架、Flask开发框架、Web开发项目实战。
1、Web页面元素,布局,CSS样式,盒模型,JavaScript,JQuery与Bootstrap掌握前端开发技术,掌握JQuery与BootStrap前端开发框架,完成页面布局与美化。
2、前端开发框架Vue,JSON数据,网络通信协议,Web服务器与前端交互熟练使用Vue框架,深入理解HTTP网络协议,熟练使用Swagger,AJAX技术实现前后端交互。
3、自定义Web开发框架,Django框架的基本使用,Model属性及后端配置,Cookie与Session,模板Templates,ORM数据模型,Redis二级缓存,RESTful,MVC模型掌握Django框架常用API,整合前端技术,开发完整的WEB系统和框架。
4、Flask安装配置,App对象的初始化和配置,视图函数的路由,Request对象,Abort函数,自定义错误,视图函数的返回值,Flask上下文和请求钩子,模板,数据库扩展包Flask-Sqlalchemy,数据库迁移扩展包Flask-Migrate,邮件扩展包Flask-Mail。掌握Flask框架的常用API,与Django框架的异同,并能独立开发完整的WEB系统开发。
第三阶段:爬虫与数据分析
阶段目标:
1. 熟练掌握爬虫运行原理及常见网络抓包工具使用,能够对HTTP及HTTPS协议进行抓包分析
2. 熟练掌握各种常见的网页结构解析库对抓取结果进行解析和提取
3. 熟练掌握各种常见反爬机制及应对策略,能够针对常见的反爬措施进行处理
4. 熟练使用商业爬虫框架Scrapy编写大型网络爬虫进行分布式内容爬取
5. 熟练掌握数据分析相关概念及工作流程
6. 熟练掌握主流数据分析工具Numpy、Pandas和Matplotlib的使用
7. 熟练掌握数据清洗、整理、格式转换、数据分析报告编写
8. 能够综合利用爬虫爬取豆瓣网电影评论数据并完成数据分析全流程项目实战
知识点:
网络爬虫开发、数据分析之Numpy、数据分析之Pandas。
1、爬虫页面爬取原理、爬取流程、页面解析工具LXML,Beautifulfoup,正则表达式,代理池编写和架构、常见反爬措施及解决方案、爬虫框架结构、商业爬虫框架Scrapy,基于对爬虫爬取原理、网站数据爬取流程及网络协议的分析和了解,掌握网页解析工具的使用,能够灵活应对大部分网站的反爬策略,具备独立完成爬虫框架的编写能力和熟练应用大型商业爬虫框架编写分布式爬虫的能力。
2、Numpy中的ndarray数据结构特点、numpy所支持的数据类型、自带的数组创建方法、算术运算符、矩阵积、自增和自减、通用函数和聚合函数、切片索引、ndarray的向量化和广播机制,熟悉数据分析三大利器之一Numpy的常见使用,熟悉ndarray数据结构的特点和常见操作,掌握针对不同维度的ndarray数组的分片、索引、矩阵运算等操作。
3、Pandas里面的三大数据结构,包括Dataframe、Series和Index对象的基本概念和使用,索引对象的更换及删除索引、算术和数据对齐方法,数据清洗和数据规整、结构转换,熟悉数据分析三大利器之一Pandas的常见使用,熟悉Pandas中三大数据对象的使用方法,能够使用Pandas完成数据分析中最重要的数据清洗、格式转换和数据规整工作、Pandas对文件的读取和操作方法。
4、matplotlib三层结构体系、各种常见图表类型折线图、柱状图、堆积柱状图、饼图的绘制、图例、文本、标线的添加、可视化文件的保存,熟悉数据分析三大利器之一Matplotlib的常见使用,熟悉Matplotlib的三层结构,能够熟练使用Matplotlib绘制各种常见的数据分析图表。能够综合利用课程中所讲的各种数据分析和可视化工具完成股票市场数据分析和预测、共享单车用户群里数据分析、全球幸福指数数据分析等项目的全程实战。
第四阶段:机器学习与人工智能
阶段目标:
1. 理解机器学习相关的基本概念及系统处理流程
2. 能够熟练应用各种常见的机器学习模型解决监督学习和非监督学习训练和测试问题,解决回归、分类问题
3. 熟练掌握常见的分类算法和回归算法模型,如KNN、决策树、随机森林、K-Means等
4. 掌握卷积神经网络对图像识别、自然语言识别问题的处理方式,熟悉深度学习框架TF里面的张量、会话、梯度优化模型等
5. 掌握深度学习卷积神经网络运行机制,能够自定义卷积层、池化层、FC层完成图像识别、手写字体识别、验证码识别等常规深度学习实战项目
知识点:
1、机器学习常见算法、sklearn数据集的使用、字典特征抽取、文本特征抽取、归一化、标准化、数据主成分分析PCA、KNN算法、决策树模型、随机森林、线性回归及逻辑回归模型和算法。熟悉机器学习相关基础概念,熟练掌握机器学习基本工作流程,熟悉特征工程、能够使用各种常见机器学习算法模型解决分类、回归、聚类等问题。
2、Tensorflow相关的基本概念,TF数据流图、会话、张量、tensorboard可视化、张量修改、TF文件读取、tensorflow playround使用、神经网络结构、卷积计算、激活函数计算、池化层设计,掌握机器学习和深度学习之前的区别和练习,熟练掌握深度学习基本工作流程,熟练掌握神经网络的结构层次及特点,掌握张量、图结构、OP对象等的使用,熟悉输入层、卷积层、池化层和全连接层的设计,完成验证码识别、图像识别、手写输入识别等常见深度学习项目全程实战。
Ⅶ python怎么抓取微信阅
抓取微信公众号的文章
一.思路分析
目前所知晓的能够抓取的方法有:
1、微信APP中微信公众号文章链接的直接抓取(http://mp.weixin.qq.com/s?__biz=MjM5MzU4ODk2MA==&mid=2735446906&idx=1&sn=&scene=0#rd)
2、通过微信合作方搜狗搜索引擎(http://weixin.sogou.com/),发送相应请求来间接抓取
第1种方法中,这种链接不太好获取,而且他的规律不是特别清晰。
因此本文采用的是方法2----通过给 weixin.sogou.com 发送即时请求来实时解析抓取数据并保存到本地。
二.爬取过程
1、首先在搜狗的微信搜索页面测试一下,这样能够让我们的思路更加清晰
在搜索引擎上使用微信公众号英文名进行“搜公众号”操作(因为公众号英文名是公众号唯一的,而中文名可能会有重复,同时公众号名字一定要完全正确,不然可能搜到很多东西,这样我们可以减少数据的筛选工作,只要找到这个唯一英文名对应的那条数据即可),即发送请求到'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&_sug_=n&_sug_type_= ' % 'python',并从页面中解析出搜索结果公众号对应的主页跳转链接。
2.获取主页入口内容
使用request , urllib,urllib2,或者直接使用webdriver+phantomjs等都可以
这里使用的是request.get()的方法获取入口网页内容
[python]view plain
#爬虫伪装头部设置
self.headers={'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64;rv:51.0)Gecko/20100101Firefox/51.0'}
#设置操作超时时长
self.timeout=5
#爬虫模拟在一个request.session中完成
self.s=requests.Session()
[python]view plain
#搜索入口地址,以公众为关键字搜索该公众号
defget_search_result_by_keywords(self):
self.log('搜索地址为:%s'%self.sogou_search_url)
returnself.s.get(self.sogou_search_url,headers=self.headers,timeout=self.timeout).content
3.获取公众号地址
从获取到的网页内容中,得到公众号主页地址, 这一步骤有很多方法, beautifulsoup、webdriver,直接使用正则,pyquery等都可以
这里使用的是pyquery的方法来查找公众号主页入口地址
[python]view plain
#获得公众号主页地址
defget_wx_url_by_sougou_search_html(self,sougou_search_html):
doc=pq(sougou_search_html)
#printdoc('p[class="tit"]')('a').attr('href')
#printdoc('div[class=img-box]')('a').attr('href')
#通过pyquery的方式处理网页内容,类似用beautifulsoup,但是pyquery和jQuery的方法类似,找到公众号主页地址
returndoc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
4.获取公众号主页的文章列表
首先需要加载公众号主页,这里用的是phantomjs+webdriver, 因为这个主页的内容需要JS 渲染加载,采用之前的方法只能获得静态的网页内容
[python]view plain
#使用webdriver加载公众号主页内容,主要是js渲染的部分
defget_selenium_js_html(self,url):
browser=webdriver.PhantomJS()
browser.get(url)
time.sleep(3)
#执行js得到整个页面内容
html=browser.execute_script("returndocument.documentElement.outerHTML")
returnhtml
得到主页内容之后,获取文章列表,这个文章列表中有我们需要的内容
[python]view plain
#获取公众号文章内容
defparse_wx_articles_by_html(self,selenium_html):
doc=pq(selenium_html)
print'开始查找内容msg'
returndoc('div[class="weui_media_boxappmsg"]')
#有的公众号仅仅有10篇文章,有的可能多一点
#returndoc('div[class="weui_msg_card"]')#公众号只有10篇文章文章的
5.解析每一个文章列表,获取我们需要的信息
6.处理对应的内容
包括文章名字,地址,简介,发表时间等
7.保存文章内容
以html的格式保存到本地
同时将上一步骤的内容保存成excel 的格式
8.保存json数据
这样,每一步拆分完,爬取公众号的文章就不是特别难了。
三、源码
第一版源码如下:
[python]view plain
#!/usr/bin/python
#coding:utf-8
importsys
reload(sys)
sys.setdefaultencoding('utf-8')
fromurllibimportquote
frompyqueryimportPyQueryaspq
fromseleniumimportwebdriver
importrequests
importtime
importre
importjson
importos
classweixin_spider:
def__init__(self,kw):
'构造函数'
self.kw=kw
#搜狐微信搜索链接
#self.sogou_search_url='http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&_sug_=n&_sug_type_='%quote(self.kw)
self.sogou_search_url='http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_='%quote(self.kw)
#爬虫伪装
self.headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64;rv:47.0)Gecko/20100101FirePHP/0refox/47.0FirePHP/0.7.4.1'}
#操作超时时长
self.timeout=5
self.s=requests.Session()
defget_search_result_by_kw(self):
self.log('搜索地址为:%s'%self.sogou_search_url)
returnself.s.get(self.sogou_search_url,headers=self.headers,timeout=self.timeout).content
defget_wx_url_by_sougou_search_html(self,sougou_search_html):
'根据返回sougou_search_html,从中获取公众号主页链接'
doc=pq(sougou_search_html)
#printdoc('p[class="tit"]')('a').attr('href')
#printdoc('div[class=img-box]')('a').attr('href')
#通过pyquery的方式处理网页内容,类似用beautifulsoup,但是pyquery和jQuery的方法类似,找到公众号主页地址
returndoc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
defget_selenium_js_html(self,wx_url):
'执行js渲染内容,并返回渲染后的html内容'
browser=webdriver.PhantomJS()
browser.get(wx_url)
time.sleep(3)
#执行js得到整个dom
html=browser.execute_script("returndocument.documentElement.outerHTML")
returnhtml
defparse_wx_articles_by_html(self,selenium_html):
'从selenium_html中解析出微信公众号文章'
doc=pq(selenium_html)
returndoc('div[class="weui_msg_card"]')
defswitch_arctiles_to_list(self,articles):
'把articles转换成数据字典'
articles_list=[]
i=1
ifarticles:
forarticleinarticles.items():
self.log(u'开始整合(%d/%d)'%(i,len(articles)))
articles_list.append(self.parse_one_article(article))
i+=1
#break
returnarticles_list
defparse_one_article(self,article):
'解析单篇文章'
article_dict={}
article=article('.weui_media_box[id]')
title=article('h4[class="weui_media_title"]').text()
self.log('标题是:%s'%title)
url='http://mp.weixin.qq.com'+article('h4[class="weui_media_title"]').attr('hrefs')
self.log('地址为:%s'%url)
summary=article('.weui_media_desc').text()
self.log('文章简述:%s'%summary)
date=article('.weui_media_extra_info').text()
self.log('发表时间为:%s'%date)
pic=self.parse_cover_pic(article)
content=self.parse_content_by_url(url).html()
contentfiletitle=self.kw+'/'+title+'_'+date+'.html'
self.save_content_file(contentfiletitle,content)
return{
'title':title,
'url':url,
'summary':summary,
'date':date,
'pic':pic,
'content':content
}
defparse_cover_pic(self,article):
'解析文章封面图片'
pic=article('.weui_media_hd').attr('style')
p=re.compile(r'background-image:url(.∗?)')
rs=p.findall(pic)
self.log('封面图片是:%s'%rs[0]iflen(rs)>0else'')
returnrs[0]iflen(rs)>0else''
defparse_content_by_url(self,url):
'获取文章详情内容'
page_html=self.get_selenium_js_html(url)
returnpq(page_html)('#js_content')
defsave_content_file(self,title,content):
'页面内容写入文件'
withopen(title,'w')asf:
f.write(content)
defsave_file(self,content):
'数据写入文件'
withopen(self.kw+'/'+self.kw+'.txt','w')asf:
f.write(content)
deflog(self,msg):
'自定义log函数'
printu'%s:%s'%(time.strftime('%Y-%m-%d%H:%M:%S'),msg)
defneed_verify(self,selenium_html):
'有时候对方会封锁ip,这里做一下判断,检测html中是否包含id=verify_change的标签,有的话,代表被重定向了,提醒过一阵子重试'
returnpq(selenium_html)('#verify_change').text()!=''
defcreate_dir(self):
'创建文件夹'
ifnotos.path.exists(self.kw):
os.makedirs(self.kw)
defrun(self):
'爬虫入口函数'
#Step0:创建公众号命名的文件夹
self.create_dir()
#Step1:GET请求到搜狗微信引擎,以微信公众号英文名称作为查询关键字
self.log(u'开始获取,微信公众号英文名为:%s'%self.kw)
self.log(u'开始调用sougou搜索引擎')
sougou_search_html=self.get_search_result_by_kw()
#Step2:从搜索结果页中解析出公众号主页链接
self.log(u'获取sougou_search_html成功,开始抓取公众号对应的主页wx_url')
wx_url=self.get_wx_url_by_sougou_search_html(sougou_search_html)
self.log(u'获取wx_url成功,%s'%wx_url)
#Step3:Selenium+PhantomJs获取js异步加载渲染后的html
self.log(u'开始调用selenium渲染html')
selenium_html=self.get_selenium_js_html(wx_url)
#Step4:检测目标网站是否进行了封锁
ifself.need_verify(selenium_html):
self.log(u'爬虫被目标网站封锁,请稍后再试')
else:
#Step5:使用PyQuery,从Step3获取的html中解析出公众号文章列表的数据
self.log(u'调用selenium渲染html完成,开始解析公众号文章')
articles=self.parse_wx_articles_by_html(selenium_html)
self.log(u'抓取到微信文章%d篇'%len(articles))
#Step6:把微信文章数据封装成字典的list
self.log(u'开始整合微信文章数据为字典')
articles_list=self.switch_arctiles_to_list(articles)
#Step7:把Step5的字典list转换为Json
self.log(u'整合完成,开始转换为json')
data_json=json.mps(articles_list)
#Step8:写文件
self.log(u'转换为json完成,开始保存json数据到文件')
self.save_file(data_json)
self.log(u'保存完成,程序结束')
#main
if__name__=='__main__':
gongzhonghao=raw_input(u'输入要爬取的公众号')
ifnotgongzhonghao:
gongzhonghao='python6359'
weixin_spider(gongzhonghao).run()
第二版代码:
对代码进行了一些优化和整改,主要:
1.增加了excel存贮
2.对获取文章内容规则进行修改
3.丰富了注释
本程序已知缺陷: 如果公众号的文章内容包括视视频,可能会报错。
[python]view plain
#!/usr/bin/python
#coding:utf-8
Ⅷ 关于虫师的pdf中python+selenium的多进程执行测试用例失败的问题
#之前用过如下代码爬过豆瓣用户,效率还可以
#好像叫gevent协称模块来着,你可以试试。
#!/usr/bin/envpython
#coding:utf-8
fromseleniumimportwebdriver
fromselenium.webdriver.phantomjs.
fromgeventimportmonkey
monkey.patch_all()
importgevent
importsys
importtime
defdoJob(urls,name):
service_args=[
]
browser=webdriver.PhantomJS(executable_path=r'D:TestProjectphantomjsinphantomjs.exe',service_args=service_args)
wr=open('done/'+name+'.txt','w')
forurlinurls:
browser.get(url)
time.sleep(1)
soup=BeautifulSoup(browser.page_source.encode('utf-8'))
findNames=soup.findAll('div',attrs={'class':'name'})
iffindNamesisNone:
printurl
forsubinfindNames:
n=sub.a.string.encode('utf8')ifsub.a.stringisnotNoneelse''
pl=sub.span.string.encode('utf8')ifsub.span.stringisnotNoneelse''
wr.write(n+','+pl)
wr.write(' ')
wr.close()
browser.quit()
files={'culture':[],'travel':[],'ent':[],'fashion':[],'life':[],'tech':[]}
forkey_fninfiles:
withopen(key_fn+'.link','r')asf:
files[key_fn]=f.read().split(' ')
gevent.joinall([
gevent.spawn(doJob,files['culture'],'culture'),
gevent.spawn(doJob,files['travel'],'travel'),
gevent.spawn(doJob,files['ent'],'ent'),
gevent.spawn(doJob,files['fashion'],'fashion'),
gevent.spawn(doJob,files['life'],'life'),
gevent.spawn(doJob,files['tech'],'tech'),
])
Ⅸ python 用 beautifulsoup 获得 <div id="z"></div>的东西
一、你取到的跟浏览器不一样,这一般是因为内容是js生成或者js以ajax取到然后更新进去的。
想要自己写代码解决恐怕你要自己分析一下网页所带的js的功能了,或者想偷懒的话用webbrowser之类的模块通过浏览器来取得内容。
二、要取div的id属性用BeautifulSoup即可达到目的,要是装了PyQuery的就更简单,下面给个BeautifulSoup的例子:
from bs4 import BeautifulSoup
sp = BeautifulSoup('<div id="z"></div>')
assert(sp.div['id'],'z')
print sp.div['id']
Ⅹ Selemium 实战
Q1: 怎么在ip被封之后实现自动更换代理池内的代理?
A1: 用random.choice 随机选取ip
Q2: 如何用一句通俗的语言解释清楚request、beautifulsoup和selenium三者与浏览器之间的关系?
A2: bs4将html变成树结构,lxml将html变成文件结构,都是为了方便查找。re为匹配模式。
BeautifulSoup:处理速度快,同时可以 连续 查找,主要 用于静态网页
经过BeautifulSoup处理以后,编码方式都变成了Unicode,需要将其变成所燃闷需的编码方式:可以利用encode(‘需要的和举编码’),还可以利用 BeautifulSoup(网页/html, lxml/xml”).prettify(‘皮棚弯需要的编码’) 可以利用soup.original_encoding检测原来的编码。
Selenium:主要用于 动态网页 ,查找速度慢,解析时要注意 .find_ elements by_xpath和.find element _by_xpath有区别,同时利用浏览器时要配置。 .PhantomJS:
drive=webdriver.PhantomJS(‘D:Anaconda2phantomjswindow sin phantomjs.exe’)
Q3: 构建好代理池后,如何在一次爬虫中自动切换代理? 比如代理无效,或者代理ip被封,这时自动切换下一个ip。
A3: 首先你要有一个ip代理池(如果比较豪可以自己买真实ip自行搭建,好处独享有技术门槛,或者找第三方ip代理商对接,好吃廉价,但ip不独享), 真实ip需要自己写程序来代理转发,第三方ip代理商则会提供相关转发API,直接调用就可以,这东西没什么技术难度
Q4: ip_list.append(f'{protpcol}://{ip}:{port}')这里的f是格式化?
A4: