Python网页信息抓取

使用正则抓取

使用正则匹配需要抓取的内容执行页面抓取。但是正则性能不好,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中。

#coding=utf-8
import urllib.request #python3
import re

def getHtml(url):
    page = urllib.request.urlopen(url) #python3
    html=page.read()
    return  html
#运行脚本将得到整个页面中包含图片的URL地址。
def getImg(html,host):
    #reg = r'src="(.+?\.jpg)" pic_ext'
    reg = r'src="(.+?\.jpg)"'
    #re.compile() 可以把正则表达式编译成一个正则表达式对象.
    imgre = re.compile(reg)
    #html = html.decode('utf-8') #python3
    html = html.decode('utf-8','ignore')  #python3
    #re.findall() 方法读取html 中包含 imgre(正则表达式)的数据
    imglist = re.findall(imgre,html)
    # 把筛选的图片地址通过for循环遍历并保存到本地
    x = 0
    for imgurl in imglist:
        # urllib.urlretrieve()方法,直接将远程数据下载到本地
        urllib.request.urlretrieve(host+imgurl, 'd://img//%s.jpg' % x)
        x += 1

html=getHtml("http://tieba.baidu.com/p/2460150866")
print (getImg(html,""))



#将获取的字符串strTxt做decode时,指明ignore,会忽略非法字符,
#当然对于gbk等编码,处理同样问题的方法是类似的
#strTest = strTxt.decode('utf-8', 'ignore')
#return strTest
##[补充]
#默认的参数就是strict,代表遇到非法字符时抛出异常;
#如果设置为ignore,则会忽略非法字符;
#如果设置为replace,则会用?号取代非法字符;
#如果设置为xmlcharrefreplace,则使用XML的字符引用。

使用Beautiful Soup抓取

Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库,提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,BeautifulSoup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。文档地址:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.htmlhttps://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

windows安装 Beautiful Soup

下载地址:https://pypi.python.org/pypi/beautifulsoup4

1 进入python安装目录下的Scripts目录,查看是否有pip工具。为了避免出现一些未知错误,DOS窗口使用管理员权限打开

2 使用pip工具安装,在python安装目录下的Scripts目录下执行如下命令

pip install beautifulsoup4

3 验证

python命令行下:
import bs4

4 如果需要升级pip 命令:

python -m pip install -U pip


posted @ 2017-07-16 23:02  二月长安  阅读(224)  评论(0编辑  收藏  举报