爬虫基础_01——正则
2017-06-03 本文已影响62人
王小鱼鱻
今天这个爬虫比较简单,爬了一下花瓣网(美女图)的一页的图片。
这里只用了正则,主要思想是:利用正则匹配要爬取的图片url,然后下载图片存到本地;
下面是具体的代码:
# encoding = utf-8
import re
import urllib
import requests
#获取图片的url
def getHtml(url):
page = urllib.request.urlopen(url)
html= page.read()
return html
#获取网页的内容
html = getHtml('http://huaban.com/boards/481662/')
#正则匹配
p= r'<img src="([.*\S]*)" width="\d{3}"'
imgurls = re.findall(p, html.decode('utf-8'))
#爬取图片
x=1
for imgurl in imgurls:
print('http:'+imgurl)
urllib.request.urlretrieve('http:'+imgurl, 'F:images/huaban/%s.jpg' % x)
print("downloading %d"%x)
x +=1
下面是爬到的图片:
花瓣美女图.png因为这个页面的图片是下拉加载的,所以暂时只下载了40张,这个问题还在学习,希望有前辈指导一二;
写的比较糙,有问题麻烦爬友们指出。
这里小弟写的时候有2个小问题:
1、正则的匹配,方式很简单易懂,开始使用可能不太容易匹配成功,要反复多试几次才能熟练掌握;
2、
imgurls = re.findall(p, html.decode('utf-8'))
这里如果没有带.decode('utf-8'),就报错
TypeError: cannot use a string pattern on a bytes-like object
3、正则的一些基本用法:
1)re.search(pattern, string, flags=0)
在字符串中查找,是否能匹配正则表达式。返回_sre.SRE_Match对象,如果不能匹配返回None。
2)re.match(pattern, string, flags=0)
字符串的开头是否能匹配正则表达式。返回_sre.SRE_Match对象,如果不能匹配返回None。
3)re.split(pattern, string, maxsplit=0)
通过正则表达式将字符串分离。如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到list中返回。maxsplit是分离的次数,maxsplit=1分离一次,默认为0,不限制次数。
4、其他的一些正则的用法总结:
1、正则表达式
2、Python之re模块 —— 正则表达式操作
3、Python正则式的基本用法