相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib包提供了较为完整的访问网页文档的API.抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。春运了,Python大佬分享一个爬取12306火车票例子(附源码),请收藏转发哦!
作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用。使用Python这样的简单编程语言,你可以使用少量编程技能就可以爬取复杂的网站。
如果手机上显示代码错乱,请分享到QQ或者其他地方,用电脑查看!!!
python能干的东西有很多,这里不再过多叙述,直接重点干货。
重要提醒:要运行,需要确认安装环境:Python2.7,还是Python3.6。
缺少的包,采用命令行:pip install 包名
进行安装,不然运行不了。
主要源码:
用户信息配置:
配置信息很重要,一定不要弄错了,不然不能成功!各种帐号密码,电话,姓名,身份证。
真的放不了地址,请私信我,已经打包好了。
以上是全部内容,不足之处请包涵!爬虫基本的原理就是,获取源码,进而获取网页内容。一般来说,只要你给一个入口,通过分析,可以找到无限个其他相关的你需要的资源,进而进行爬取。
下面在给大家分享爬取维基百科程序语言消息例子的项目在分享之前小编还是要推荐自己建立的裙Python学习:
五七七九零一二九四 这里有推荐的学习路线,基础视频学习资料和电子教程文档和Python安装工具及Python技术学习交流和分享,下面是项目实现的代码:
# coding=utf-8
import urllib
import time
import re
#第一步 获取维基百科内容
#http://zh.wikipedia.org/wiki/程序设计语言列表
keyname="程序设计语言列表"
temp='http://zh.wikipedia.org/wiki/'+str(keyname)
content = urllib.urlopen(temp).read()
open('wikipedia.html','w+').write(content)
print 'Start Crawling pages!!!'
#第二步 获取网页中的所有URL
#从原文中"0-9"到"参看"之间是A-Z各个语言的URL
start=content.find(r'0-9')
end=content.find(r'参看')
cutcontent=content[start:end]
link_list = re.findall(r"(?
fileurl=open('test.txt','w')
for url in link_list:
#字符串包含wiki或/w/index.php则正确url 否则A-Z
if url.find('wiki')>=0 or url.find('index.php')>=0:
fileurl.write(url+'\n')
#print url
num=num+1
fileurl.close()
print 'URL Successed! ',num,' urls.'
#第三步 下载每个程序URL静态文件并获取Infobox对应table信息
#国家:http://zh.wikipedia.org/wiki/阿布哈茲
#语言:http://zh.wikipedia.org/wiki/ActionScript
info=open('infobox.txt','w')
info.write('****************获取程序语言信息*************\n\n')
j=1
for url in link_list:
if url.find('wiki')>=0 or url.find('index.php')>=0:
#下载静态html
print wikiurl
language = urllib.urlopen(wikiurl).read()
name=str(j)+' language.html'
#注意 需要创建一个country的文件夹 否则总报错No such file or directory
open(r'language/'+name,'w+').write(language) #写方式打开+没有即创建
#获取title信息
title_pat=r'(?).*?(?=)'
title_ex=re.compile(title_pat,re.M|re.S)
title_obj=re.search(title_ex, language) #language对应当前语言HTML所有内容
title=title_obj.group()
#获取内容'C语言 - 维基百科,自由的百科全书' 仅获取语言名
middle=title.find(r'-')
info.write('【程序语言 '+title[:middle]+'】\n')
print title[:middle]
#第四步 获取Infobox的内容
#标准方法是通过确认其内容,找与它最近的一个结束符号
#但此处分析源码后取巧
实现
start=language.find(r'
end=language.find(r'
'+title[:middle-1]) #减去1个空格
infobox=language[start:end]
#print infobox
#第五步 获取table中属性-属性值
if "infobox vevent" in language: #防止无Infobox输出多余换行
#获取table中tr值
res_tr = r'(.*?)'
m_tr = re.findall(res_tr,infobox,re.S|re.M)
for line in m_tr:
#print unicode(line,'utf-8')
#获取表格第一列th 属性
res_th = r'(.*?)'
m_th = re.findall(res_th,line,re.S|re.M)
for mm in m_th:
#如果获取加粗的th中含超链接则处理
if "href" in mm:
restr = r'
(.*?)
'
h = re.findall(restr,mm,re.S|re.M)
print unicode(h[0],'utf-8')
info.write(h[0]+'\n')
else:
#报错用str()不行 针对两个类型相同的变量
#TypeError: coercing to Unicode: need string or buffer, list found
print unicode(mm,'utf-8') #unicode防止乱
info.write(mm+'\n')
#获取表格第二列td 属性值
res_td = r'(.*?)'
m_td = re.findall(res_td,line,re.S|re.M)
for nn in m_td:
if "href" in nn:
#处理超链接
res_value = r'(.*?)'
m_value = re.findall(res_value,nn,re.S|re.M) #m_td会出现TypeError: expected string or buffer
for value in m_value:
print unicode(value,'utf-8'),
info.write(value+' ')
print ' ' #换行
info.write('\n')
else:
print unicode(nn,'utf-8')
info.write(nn+'\n')
print '\n'
info.write('\n\n')
else:
print 'No Infobox\n'
info.write('No Infobox\n\n\n')
#设置下载数量
j=j+1
time.sleep(1)
if j==40:
break;
else:
print 'Error url!!!'
else:
print 'Download over!!!'
好了,今天就分享到这里,有想学习Python编程的伙伴们,欢迎留言和小编交流学习,最后祝大家早日成为Python大牛!
领取专属 10元无门槛券
私享最新 技术干货