python网页数据抓取(从含中文的网页中提取数据(1)(图))

优采云 发布时间: 2022-03-03 03:20

  python网页数据抓取(从含中文的网页中提取数据(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编码,请参考很详细的文章:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线