[Python下载CSDN博客]4. V3版本_使用正则表达式分析HTML(一)
2013-11-21 11:22
996 查看
一. 目标
在V2的基础上, 使用正则表达式来分析下载下来的html并提取内容.二. 需要的技术
1. 从网站抓取博客得到HTML字符串.2. 正则表达式分析HTML字符串, 提取需要的数据.
3. 提取得到后的数据再转换为本地的数据.
4. 难点: 使用正则表达式分析HTML(因为对HTM和正则表达式都不太熟悉).
三. 步骤
3.1 获取"文章分类列表"和"文章存档列表"
3.1.1 分析博客主页的HTML
使用浏览器查看http://blog.csdn.net/bagboy_taobao_com 的HTML并保存为Index.html(保存的格式必须为UTF8, 否则会乱码). 双击打开Index.html, 可以正确显示. OK, 可以用文本打开分析.3.1.2 分析"文章分类"的HTML
<li><a href="http://blog.csdn.net/bagboy_taobao_com/article/category/600202">ATL/WTL</a><span>(13)</span></li> <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/category/623494">Boost</a><span>(3)</span></li> <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/category/758331">C++模板</a><span>(3)</span></li> <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/category/484438">C/C++</a><span>(84)</span></li> ... <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/category/602741">DirectX</a><span>(2)</span></li> <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/category/663547">DLL</a><span>(3)</span></li>
有什么特点? 那就是http://blog.csdn.net/bagboy_taobao_com/article/category/600202">ATL/WTL</a>, 这里可以构造一条正则表达式http://blog\.csdn\.net/bagboy_taobao_com/article/category/.*?(?=</a>) 来匹配. 然后再最结果在构造一条正则表达式">来匹配, 得到地址和分类名.
3.1.3 分析"文章存档"的HTML
<li><a href="http://blog.csdn.net/bagboy_taobao_com/article/month/2013/11">2013年11月</a><span>(2)</span></li> <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/month/2013/10">2013年10月</a><span>(19)</span></li> <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/month/2013/09">2013年09月</a><span>(20)</span></li> ...... <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/month/2013/03">2013年03月</a><span>(18)</span></li> <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/month/2013/02">2013年02月</a><span>(20)</span></li> <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/month/2013/01">2013年01月</a><span>(13)</span></li> <li><a href="http://blog.csdn.net/bagboy_taobao_com/article/month/2012/12">2012年12月</a><span>(18)</span></li>
同上, 那就是http://blog.csdn.net/bagboy_taobao_com/article/month/2013/11">2013年11月</a>, 这里可以构造一条正则表达式http://blog\.csdn\.net/bagboy_taobao_com/article/month/.*?(?=</a>) 来匹配. 然后再最结果在构造一条正则表达式">来匹配, 得到地址和分类名.
3.1.4 Python实现提取文章分类列表和文章存档列表
#!/usr/bin/env python # coding=utf-8 # Python 2.7.3 # 获取博客文章分类列表和文章存档列表 # File: GetCategoryAndMonth.py import urllib2 import httplib import re class CHYGetCategoryAndMonth: def Parser(self, htmlStr, type, list): listResult = [] if 0 == type: pattern = re.compile(r'http://blog\.csdn\.net/bagboy_taobao_com/article/category/.*?(?=</a>)') listResult = pattern.findall(htmlStr) elif 1 == type: pattern = re.compile(r'http://blog\.csdn\.net/bagboy_taobao_com/article/month/.*?(?=</a>)') listResult = pattern.findall(htmlStr) for li in listResult: pattern = re.compile(r'">') listItem = pattern.split(li) item = listItem[:] list.append(item) ''' # 测试代码 if __name__ == '__main__': conn = httplib.HTTPConnection("blog.csdn.net") # 要模拟成IE发送, 否则CSDN不接受Python的请求 user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headersP = { 'User-Agent' : user_agent } conn.request(method = "GET", url = "/bagboy_taobao_com", headers = headersP) r1 = conn.getresponse() # 获得响应 htmlByte = r1.read() # 获得HTML htmlStr = htmlByte.decode("utf8") # 需要转换成utf8编码, 否则分析异常 my = CHYGetCategoryAndMonth() list1 = [] my.Parser(htmlByte, 1, list1) list0 = [] my.Parser(htmlByte, 0, list0) print(list1) print(list0) '''
3.2 根据"文章分类列表和文章存档列表"获取文章的URL
3.2.1 分析其中一个分类或者存档的HTML
使用浏览器查看http://blog.csdn.net/bagboy_taobao_com/article/month/2013/10 的HTML并保存为list.html(保存的格式必须为UTF8, 否则会乱码). 双击打开list.html, 可以正确显示. OK, 可以用文本打开分析<span class="link_title"><a href="/bagboy_taobao_com/article/details/13092655"> <span class="link_title"><a href="/bagboy_taobao_com/article/details/13092605"> <span class="link_title"><a href="/bagboy_taobao_com/article/details/13092535"> ...... <span class="link_title"><a href="/bagboy_taobao_com/article/details/12646185">
同上, 那就是<span class="link_title"><a href="/bagboy_taobao_com/article/details/, 这里可以构造一条正则表达式<span class="link_title"><a href="/bagboy_taobao_com/article/details/\d+ 来匹配. 然后再最结果在构造一条正则表达式/bagboy_taobao_com/article/details/\d+来匹配, 得到地址.
3.2.2 Python实现获取一个分类或者一个存档的文章URL
#!/usr/bin/env python # Python 2.7.3 # 获取博客文章 # File: GetArticleList.py import urllib2 import httplib import re class CHYGetArticleList: def Parser(self, htmlStr, list): pattern = re.compile(r'<span class="link_title"><a href="/bagboy_taobao_com/article/details/\d+') listResult = pattern.findall(htmlStr) for li in listResult: pattern = re.compile(r'/bagboy_taobao_com/article/details/\d+') listItem = pattern.findall(li) list.append(listItem[0]) ''' # http://blog.csdn.net/bagboy_taobao_com/article/month/2013/10 # 测试代码 if __name__ == '__main__': conn = httplib.HTTPConnection("blog.csdn.net") # 要模拟成IE发送, 否则CSDN不接受Python的请求 user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headersP = { 'User-Agent' : user_agent } conn.request(method = "GET", url = "/bagboy_taobao_com/article/month/2013/10", headers = headersP) r1 = conn.getresponse() # 获得响应 htmlByte = r1.read() # 获得HTML htmlStr = htmlByte.decode("utf8") # 需要转换成utf8编码, 否则分析异常 list = [] my = CHYGetArticleList() my.Parser(htmlByte, list) print(list) '''
相关文章推荐
- [Python下载CSDN博客]4. V3版本_使用正则表达式分析HTML(二)
- [Python下载CSDN博客]2. 使用BeautifulSoup分析HTML(一)
- [Python下载CSDN博客]2. 使用BeautifulSoup分析HTML(二)
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结
- 【python系列】使用正则表达式去除HTML字符串
- [Python下载CSDN博客]3. V2版本_完善内容显示格式和图片的下载
- [python爬虫] 正则表达式使用技巧及爬取个人博客实例
- python使用正则表达式分析网页中的图片并进行替换的方法
- Python使用正则表达式过滤或替换HTML标签的方法详解
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结
- 使用Python urllib2下载CSDN博客列表到本地
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
- python使用正则表达式提取html标签
- Web Scraping with Python: 使用 Python 下载 CSDN 博客图片
- 使用Python正则表达式RE从CSDN博客源代码中匹配出博客信息
- python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
- python正则表达式使用实例-替换字符串HTML标签
- Python常用正则表达式爬取网页信息及分析HTML标签总结
- Python---对html文件内容进行搜索取出特定URL地址字符串,保存成列表,并使用每个url下载图片,并保存到硬盘上,使用正则re
- [python爬虫] 正则表达式使用技巧及爬取个人博客实例