HTML爬取图片
前述:
最近闲来无事随便找了点东西玩玩,看到爬虫想随便试着练练手……
现在的HTML5还是建立在最基本的TCP/IP协议上,通过网络通信的手段进行超文本传输,简单介绍一下通信方式:
- 首先通过TCP将C/S连接在一起
- 客户端发送请求行(get||post||head……)
- 客户端发送请求头信息,如果是post会继续提交请求体
- 服务器回应状态行(版本号,状态码)
- 服务器发送数据文档
- 关闭TCP连接(如果没有保持连接请求)
Socket:
来一段百度解释:所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口,说白了就是开放人员为TCP/IP所开发的一个API接口。
以下是对所选的url进行提取状态和正文,根据http|https选取合适的代码:
import socket
import ssl #用于https来满足ssl证书
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #(ip4,TCP)
#s = ssl.wrap_socket(socket.socket())
s.connect(('www.dangdang.com',80)) #(url,port)
s.send(b'GET / HTTP/1.1\r\nHost:www.dangdang.com\r\nConnection:close\r\n\r\n')
buffer=[]
while True:
d=s.recv(1024)
if d:
buffer.append(d)
else:
break
data = b''.join(buffer)
head,html=data.split(b'\r\n\r\n',1)
print(head.decode('utf-8'))
with open('1.html','wb') as f:
f.write(html)
爬取网站图片至本地:
用python自带的urllib,获取html来进行正则表达筛选,根据http|https选取合适的代码:
'''
从网站上爬取图片,使用python3.x和urllib库
根据url是http还是https,选用合适的代码
'''
import os.path #创建文件夹路径
import urllib.request #获取html文档
import re #正则表达式
def getHtmlcode(url):
url1 = urllib.request.Request(url)
page = urllib.request.urlopen(url1).read()
page = page.decode('GB2312','ignore') #进行解码(decode)
return page
def getImg(page):
imgList = re.findall(r'(http:.*?(jpg|png|gif))',page) #正则选取http链接
#imgList = re.findall(r'(http:.*?(jpg|png|gif))',page) #正则选取https链接
x = 1
if not os.path.exists("D:/img1"): #搜索路径
os.mkdir("D:/img1")
for imgurl in imgList:
try:
print('正在下载:%s'%imgurl[0])
urllib.request.urlretrieve(imgurl[0],'D:/img1/%d.%s'%(x,imgurl[1]))
x+=1
except:
continue
if __name__ == '__main__':
url = (input('请输入网站url:'))
page = getHtmlcode(url)
getImg(page)