html抓取,并用re进行解析

#coding=utf-8import urllib.request
import re'''
url :"http://money.163.com/special/pinglun/"
抓取第一页的新闻信息,并按照以下规格输出。[{'title':'生鲜电商为何难盈利?','created_at':'2013-05-03 08:43','url':'http://money.163.com/13/0503/08/8TUHSEEI00254ITK.html'}{'title':'生鲜电商为何难盈利?','created_at':'2013-05-03 08:43','url':'http://money.163.com/13/0503/08/8TUHSEEI00254ITK.html'}
]
'''url = 'http://money.163.com/special/pinglun/'result = []f = urllib.request.urlopen(url)#<meta http-equiv="Content-Type" content="text/html; charset=gbk">
#因为网页的编码格式是gbk,所以在解码的时候也需要用gbk解码
content = f.read().decode('gbk')
# content = str(f.read(),'utf-8','ignore')#获取所需内容的模式对象,按此模式从url从获取对应符合的内容
pattern = re.compile(r'<div class="list_item clearfix">.*?</span>',re.S)
#过滤html,得到满足上面模式的内容
basic_content = re.finditer(pattern,content)#对初步内容进行加工,得到自己想要的title、created_at、url三个内容
for i in basic_content:init_dict = {}d = re.match(r'<div class="list_item clearfix">.*?<h2><a href="(.*?)">(.*?)</a></h2>.*?<span class="time">(.*?)</span>',i.group(),re.S)init_dict['title'] = d.group(2)init_dict['created_at'] = d.group(3)init_dict['url'] = d.group(1)result.append(init_dict)
print (result)

输出内容

[
{'title': '贾跃亭的成功意味着实体失败?', 'created_at': '2016-04-25 14:28:18', 'url': 'http://money.163.com/16/0425/14/BLGM1PH5002551G6.html'},
{'title': '海尔模式为何在西方叫好不叫座', 'created_at': '2016-04-22 15:00:23', 'url': 'http://money.163.com/16/0422/15/BL90MCB400253G87.html'},
{'title': '有前科就不能开网约车?', 'created_at': '2016-04-12 15:30:49', 'url': 'http://money.163.com/16/0412/15/BKFAETGB002552IJ.html'},
{'title': '影业公司能助网络视频抬身价吗', 'created_at': '2016-03-31 13:43:27', 'url': 'http://money.163.com/16/0331/13/BJG7HME600253G87.html'},
{'title': '美的收购东芝究竟值不值?', 'created_at': '2016-03-31 08:48:45', 'url': 'http://money.163.com/16/0331/08/BJFMM2AB00253G87.html'},
{'title': '日本家电企业真的不行了吗?', 'created_at': '2016-03-18 16:40:02', 'url': 'http://money.163.com/16/0318/16/BIF2FM7A002551G6.html'},
{'title': '淘宝只是中国制造乱象的镜子', 'created_at': '2016-03-16 09:56:58', 'url': 'http://money.163.com/16/0316/09/BI96K6L000253G87.html'},
{'title': 'iPhone 6s太失败? 苹果需创新', 'created_at': '2016-01-26 14:45:14', 'url': 'http://money.163.com/16/0126/14/BE8V83A500253G87.html'},
{'title': '从贴吧事件看大公司如何担责', 'created_at': '2016-01-18 16:02:05', 'url': 'http://money.163.com/16/0118/16/BDKGF2C000253G87.html'},
{'title': '销量不佳股价跌 苹果错在哪里', 'created_at': '2016-01-11 14:49:43', 'url': 'http://money.163.com/16/0111/14/BD2BHH85002551G6.html'},
{'title': '视频网站为何对快播痛下杀手?', 'created_at': '2016-01-11 14:30:31', 'url': 'http://money.163.com/16/0111/14/BD2AEC0E002551G6.html'},
{'title': '黎万强重振小米是个伪命题?', 'created_at': '2016-01-05 13:51:55', 'url': 'http://money.163.com/16/0105/13/BCIPRCDP002551G6.html'},
{'title': '手机厂商频死亡 将大洗牌?', 'created_at': '2015-12-31 12:14:33', 'url': 'http://money.163.com/15/1231/12/BC5O9GEI002551G6.html'},
{'title': '2015三星与苹果暗战胜负几何?', 'created_at': '2015-12-29 14:55:41', 'url': 'http://money.163.com/15/1229/14/BC0SN3OC002551G6.html'},
{'title': '宝能作为门口野蛮人是坏人吗', 'created_at': '2015-12-19 12:31:57', 'url': 'http://money.163.com/15/1219/12/BB6SGNBI002551G6.html'}
]

如果解码的时候用的是utf-8,则输出会是乱码。且此时若不加ignore,会报错。

content = f.read().decode('utf-8','ignore')
[
{'title': 'Ծͤijɹζʵʧ?', 'created_at': '2016-04-25 14:28:18', 'url': 'http://money.163.com/16/0425/14/BLGM1PH5002551G6.html'}, {'title': 'ģʽΪкò', 'created_at': '2016-04-22 15:00:23', 'url': 'http://money.163.com/16/0422/15/BL90MCB400253G87.html'},
{'title': 'ǰƾͲܿԼ', 'created_at': '2016-04-12 15:30:49', 'url': 'http://money.163.com/16/0412/15/BKFAETGB002552IJ.html'}, {'title': 'Ӱҵ˾Ƶ̧', 'created_at': '2016-03-31 13:43:27', 'url': 'http://money.163.com/16/0331/13/BJG7HME600253G87.html'},
{'title': 'չֵֵ֥', 'created_at': '2016-03-31 08:48:45', 'url': 'http://money.163.com/16/0331/08/BJFMM2AB00253G87.html'}, {'title': 'ձҵҵIJ', 'created_at': '2016-03-18 16:40:02', 'url': 'http://money.163.com/16/0318/16/BIF2FM7A002551G6.html'},
{'title': 'Աֻйľ', 'created_at': '2016-03-16 09:56:58', 'url': 'http://money.163.com/16/0316/09/BI96K6L000253G87.html'},
{'title': 'iPhone 6s̫ʧ? ƻ贴', 'created_at': '2016-01-26 14:45:14', 'url': 'http://money.163.com/16/0126/14/BE8V83A500253G87.html'},
{'title': '¼˾ε', 'created_at': '2016-01-18 16:02:05', 'url': 'http://money.163.com/16/0118/16/BDKGF2C000253G87.html'},
{'title': 'ѹɼ۵ ƻ', 'created_at': '2016-01-11 14:49:43', 'url': 'http://money.163.com/16/0111/14/BD2BHH85002551G6.html'},
{'title': 'ƵվΪζԿ첥ʹɱ?', 'created_at': '2016-01-11 14:30:31', 'url': 'http://money.163.com/16/0111/14/BD2AEC0E002551G6.html'},
{'title': 'ǿСǸα⣿', 'created_at': '2016-01-05 13:51:55', 'url': 'http://money.163.com/16/0105/13/BCIPRCDP002551G6.html'},
{'title': 'ֻƵ ϴƣ', 'created_at': '2015-12-31 12:14:33', 'url': 'http://money.163.com/15/1231/12/BC5O9GEI002551G6.html'},
{'title': '2015ƻսʤΣ', 'created_at': '2015-12-29 14:55:41', 'url': 'http://money.163.com/15/1229/14/BC0SN3OC002551G6.html'},
{'title': 'ΪſҰǻ', 'created_at': '2015-12-19 12:31:57', 'url': 'http://money.163.com/15/1219/12/BB6SGNBI002551G6.html'}
]
Traceback (most recent call last):File "test.py", line 21, in <module>content = f.read().decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc9 in position 167: invalid continuation byte

上面程序多了一些没必要的处理逻辑,可以进行简写,如下:

#coding=utf-8import urllib.request
import reurl = 'http://money.163.com/special/pinglun/'result = []f = urllib.request.urlopen(url)#<meta http-equiv="Content-Type" content="text/html; charset=gbk">
#因为网页的编码格式是gbk,所以在解码的时候也需要用gbk解码
content = f.read().decode('gbk')
# content = str(f.read(),'utf-8','ignore')#获取所需内容的模式对象,按此模式从url从获取对应符合的内容
pattern = re.compile(r'<div class="list_item clearfix">.*?<h2><a href="(.*?)">(.*?)</a></h2>.*?<span class="time">(.*?)</span>',re.S)
#过滤html,得到满足上面模式的内容
basic_content = re.finditer(pattern,content)print (basic_content)
#对初步内容进行加工,得到自己想要的title、created_at、url三个内容
for i in basic_content:result.append({'title':i.group(2),'created_at':i.group(3),'url':i.group(1)})
print (result)

python html抓取,并用re正则表达式解析(一)相关推荐

  1. Python 多线程抓取网页 牛人 use raw socket implement http request great

    Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...

  2. python爬虫招聘-Python爬虫抓取智联招聘(基础版)

    原标题:Python爬虫抓取智联招聘(基础版) 作者:C与Python实战 「若你有原创文章想与大家分享,欢迎投稿.」 对于每个上班族来说,总要经历几次换工作,如何在网上挑到心仪的工作?如何提前为心仪 ...

  3. Python 多线程抓取网页

    Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...

  4. python教程怎么抓起数据_介绍python 数据抓取三种方法

    三种数据抓取的方法正则表达式(re库) BeautifulSoup(bs4) lxml *利用之前构建的下载网页函数,获取目标网页的html,我们以https://guojiadiqu.bmcx.co ...

  5. 如何用python爬股票数据_python爬虫股票数据,如何用python 爬虫抓取金融数据

    Q1:如何用python 爬虫抓取金融数据 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为 ...

  6. Python爬虫抓取某音乐网站MP3(下载歌曲、存入Sqlite)

    Python爬虫抓取某音乐网站MP3(下载歌曲.存入Sqlite) 最近右胳膊受伤,打了石膏在家休息.为了实现之前的想法,就用左手打字.写代码,查资料完成了这个资源小爬虫.网页爬虫, 最主要的是协议分 ...

  7. Python爬虫抓取考试试题

    Python爬虫抓取考试试题 今天做了个小玩意,但觉得挺有意思的,分享给大家.主要是这样的,因为帮妹子寻找考试资料,发现同一本书不同的章节分别在不同的链接中,复制起来实在要命,所以就在想能不能用爬虫实 ...

  8. python数据抓取

    python数据抓取 一.页面分析 二.网页抓取方法 1.正则表达式方法 2.BeautifulSoup 模块 3.lxml 模块 4.各方法的对比总结 三.Xpath选择器 四.CSS选择器 五.数 ...

  9. Python爬虫抓取论文引用量

    Python爬虫抓取论文引用量 目录 Python爬虫抓取论文引用量 1 平台情况介绍 2 爬虫抓取引用量 2.1 正则表达式匹配 2.2 循环获取数据 2.3 数据保存 3 完整代码 1 平台情况介 ...

  10. Python爬虫--抓取糗事百科段子

    今天使用python爬虫实现了自动抓取糗事百科的段子,因为糗事百科不需要登录,抓取比较简单.程序每按一次回车输出一条段子,代码参考了 http://cuiqingcai.com/990.html 但该 ...

最新文章

  1. 做一个快乐的产品经理
  2. fireworks做图的最高长度
  3. Spring Boot 项目实现热部署
  4. 基于ArcSDE的影像数据管理-解决篇(转载)
  5. 检测窥屏_开挂、狙击、窥屏?乱象丛生的炉石狂野天梯,到底怎么了?
  6. android webview 下载视频播放 206,Android webview+Html5 video
  7. Error: Loading chunk * failed,Vue Router懒加载报错问题解决方案
  8. Django项目部署:使用uwsgi和nginx的方式
  9. SpringBoot中静态资源配置
  10. error LNK2005: 已经在 app_launcher.obj 中定义
  11. STM32 使用SPI读写FLASH(W25Q64型号)
  12. 智能网关路灯杆智慧照明解决方案
  13. QQ桌球瞄准器的球心计算算法
  14. 防止cookie 欺骗
  15. 自定义 SpringBoot Banner 图案
  16. REST ful规范
  17. CC2640R2F BLE5.0 CC2640R2F UART驱动
  18. win10更改IP地址遇错(出现了一个意外情况,不能完成你的更改)
  19. AttributeError: Layer my_model has no inbound nodes.
  20. 让3个线程打印ABC

热门文章

  1. 服务器被攻击网站打不开解决方案
  2. QEMUKVM 虚拟机使用实例
  3. WXPY自动转发群消息
  4. 2020-11-12 Python 类继承、多态和特殊模式
  5. 怎么优雅的介绍自己的项目?
  6. PV(访问量)、UV(独立访客)、IP(独立IP)
  7. 电脑远程桌面连接怎么操作?
  8. marshmallow——自定义类型
  9. sshd远程主机间的访问
  10. java编程实现行列式计算应用_Java实现行列式计算