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