参考博文1),实现了一个简单的爬虫,爬取一个网页上的图片,后面有时间,再学习用beautifulSoup爬取所有网页的图片.
#!usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author:cc
@file: scraper_test0.py
@time:2017/04/02
"""
# urllib.request.urlopen(url, data=None, [timeout, ]*, ...)
# urllib.request.urlretrieve(url[, filename[, reporthook[, data]]])
# copy一份url所在文件到本地,并给他取名filename(可加路径)
# reprothook传递三条语句:当前已下载了几个blocks: count,每个block大小block_size, 共有total_size个blocks
# 通过hook语句追踪下载进度,下载速度,和时间
# 正则表达式
"""
. 匹配除换行符外字符
b* 匹配b字符0或多次
b+ 匹配b字符1或多次
b? 匹配b字符0或1次
*?/+?/?? 通常*/+/?尽量匹配更多的字符,为了限定匹配到最少,添加?,使之非贪婪匹配
b{m} 匹配m个b
b{m,n}匹配m~n个b, b{m,}匹配无穷多个
b{m,n}? 只匹配m个
[abcdefg] 匹配所有a-g中的字符
r("www.baidu\.com")只匹配括号里的内容,可在括号外面添加头或尾进行更精确定位
\ 反斜杠(总是分别成对解析):
python中\\代表一个反斜杠, re中\代表转义字符;
例如要用正则化表示一个反斜杠,python中需要"\\\\", re.compiler("\\\\")解析为\
或者用原始字符串 r"\\.abc"表示re.compiler(r"\\.abc")解析为\.abc
例如采用字符串,先解析字符串在解析正则项
re.compile("\.jpg")中解析为.jpg; python对\无法识别
re.compile("\\.jpg")中解析为.jpg
re.compile("\\\.jpg")中解析为\.jpg
re.compile("\\\\.jpg")中解析为\.jpg
若采用原始字符解析,直接解析正则项
re.compile(r"\.jpg")解析为.jpg
re.compile(r"\\.jpg")解析为\.jpg
re.compile(r"\\\.jpg")解析为\.jpg
re.compile(r"\\\\.jpg")解析为\\.jpg
"""
import re
from six.moves import urllib
# 获取网页内容
def getHtml(url):
# page = urllib.urlopen(url) #在python3和python2.6等早期版本中已弃用
page = urllib.request.urlopen(url) #等价于urllib2.urlopen()
html = page.read() # read(size)
return html
# 采用正则匹配寻找链接:
def getImag(html):
# reg = "(https:.*\.jpg)"
# reg2 = '"middleURL":"(https:.+?\.jpg)"'
# reg = r'src="(.+?\.jpg)" pic_ext'
#reg2 = r"src='(.+?\.[a-z]+g)'"
# reg2 = r'"[a-zA-Z0-9]+URL":"(https:.+?\.jpg)"'
#匹配thunderURL和middleURL:https://******.jpg
reg2 = r'(https:.+?\.jpg)'
# 在采用match 或者search等之前,需要编译正则表达式为通用的表达类
prog = re.compile(reg2)
result = re.findall(prog, html)
i = 0
for k in result:
if k != '':
urllib.request.urlretrieve(k, '/home/cc/temp/%s.jpg' %i)
i = i + 1
return result
url = "https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=angelababy&oq=ange&rsp=0"
# url = "http://tieba.baidu.com/p/2460150866"
html = getHtml(url)
print(getImag(html))
参考: