python网页数据抓取(从含中文的网页中提取数据(1)(图))
优采云 发布时间: 2022-03-03 03:20python网页数据抓取(从含中文的网页中提取数据(1)(图))
目标:使用正则表达式从收录中文的网页中提取数据1、获取该网页的所有数据1.1 判断我们要操作的网页的思维过程:url = '#39;
打开要操作的网页:req = urllib2.open(url)
读取网页,将网页数据放入变量:html = req.read()
别忘了关闭页面:req.close()
1.2将上述过程写成函数:
def get_html(url):
try:
req = urllib2.open(url)
html = req.read()
return html
finally:
req.close()
html = get_html('http://q.stock.sohu.com/cn/603077/cwzb.shtml')
2、查看网页2.1 思考过程因为不用开发工具直接查看网页源代码,顺便练一下I/O,所以我打算把网页输出到TXT。
打开一个可写文件:file = open('C:/Users/YourName/Desktop/text.txt','w')
将网页数据写入文件:file.write(html)
别忘了关闭文件:file.close()
2.2将上述过程写成函数:
def out_put(file_name,content):
try:
file = open(file_name,'w')
file.write(content)
finally:
file.close()
out_put('C:/Users/YourName/Desktop/text.txt',html)
运行后,在桌面的文本文件中查看网页源代码。
3、解析网页源代码3.1 确定网页代码,查看网页源代码。一般会在头部标明代码类型。本例中,测试网页中的代码类型为:gb2312
部分网页头部标明的编码类型与实际不符,非常不合格,会导致后续代码不可用。所以有第三方py包chardet来测试str编码类型(我没下载,不会用)。
3.2 确定要捕获的数据如果要捕获“总利润”的数值和百分比,查看源码,“总利润”附近的代码如下:
……
总利润
19392
-72.22%
……
3.3正则表达式如果表达式中有中文,别忘了加“u”;任何时候,别忘了加“r”
expression = ur'利润总额\D+?(-?\d+\.?\d*)\D*?(-?\d+.*?%)'
3.4 很严重的事情! ! !由于这里有非中文字符,所以必须在“格式”中选择“以utf-8格式编码”,不能选择“无BOM”。否则运行时会报错,原因不明。
4、提取数据
pattern = re.compile(expression)
result = pattern.findall(html)
又是一件大事! ! !
使用此代码运行,可以匹配正则和任何内容。原因是网页的html代码是gb2312,程序代码是unicode代码。两者并不统一。代码:
pattern = re.compile(expression.encode('gb2312')) #把程序代码编码转换成'gb2312'
注意:代码转换参考
5、整合
# -*- coding : utf-8 -*-
import urllib2
import re
def get_html(url):
try:
req = urllib2.urlopen(url)
html = req.read()
return html
finally:
req.close()
html = get_html('http://q.stock.sohu.com/cn/603077/cwzb.shtml')
expression = ur'利润总额\D+?(-?\d+\.?\d*)\D*?(-?\d+.*?%)'
pattern = re.compile(expression.encode('gb2312'))
result = pattern.findall(html)
print result
关于Unicode编码,请参考很详细的文章: