您的位置:首页 > 编程语言 > Python开发

python简单爬虫学习

2016-05-02 20:50 513 查看
获取整个页面的信息:

#coding = utf-8
import urllib.request

def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return page

html = getHtml("http://www.baidu.com")
print (html)




要搞到页面的jpg,这个怎么玩呢?用正则:

#coding = utf-8
import urllib.request
import re
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return page

def getImg(html):
#正则筛选.jpg,html本质就是一串码流(字符串)
reg = r'src = "(.+?\.jpg)" pic_ext'

imgRe = re.compile(reg)
imgList = re.findall(imgRe,html)
name = 0
for i in imgList:
urllib.request.urlretrieve(i,'%s.jpg' %name)
name += 1

html = getHtml("http://write.blog.csdn.net/mdeditor")

print (getImg(html))


但是这样做后出现403错误了:



解决方法:参考Python 3.x 中”HTTP Error 403: Forbidden”问题的解决方案

原因是如果用 urllib.request.urlopen 方式打开一个URL,服务器端只会收到一个单纯的对于该页面访问的请求,但是服务器并不知道发送这个请求使用的浏览器,操作系统,硬件平台等信息,而缺失这些信息的请求往往都是非正常的访问,例如爬虫.

有些网站为了防止这种非正常的访问,会验证请求信息中的UserAgent(它的信息包括硬件平台、系统软件、应用软件和用户个人偏好),如果UserAgent存在异常或者是不存在,那么这次请求将会被拒绝(如上错误信息所示)

所以可以尝试在请求中加入UserAgent的信息:

headers = {‘User-Agent’:’Mozilla/5.0 (Windows NT 6.1; WOW64; >rv:23.0) Gecko/20100101 Firefox/23.0’}

req = urllib.request.Request(url=myUrl, headers=headers)

data = urllib.request.urlopen(req).read()

#coding = utf-8
import urllib.request
import re
def getHtml(myUrl):
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url=myUrl, headers=headers)
data = urllib.request.urlopen(req).read()
#要把网页的编码格式搞成utf-8的,因为python3.x的read()函数返回的事bytes对象,不是string,要转换成string对象
data = data.decode('utf-8')
return data

def getImg(html):
#正则筛选.jpg,html本质就是一串码流(字符串)
reg = r'src="(.+?\.jpg)" pic_ext'
#构建正则对象
imgRe = re.compile(reg)
imgList = re.findall(imgRe,html)
name = 0

for i in imgList:
urllib.request.urlretrieve(i,'%s.jpg' %name)
name += 1
print ("%s.jpg" %name)

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


抓到的图片

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 爬虫 utf-8