前言:
刚开始以为Python爬虫很高深,其实,当你模仿其他人的代码,敲了一遍之后,你8成就可以理解Python的基本爬虫了。
无论是学习什么事情,刚开始就要准备好利器工具,那样我们才能开始我们的旅程。工欲善其事,必先利其器麻!
Python的安装:点击打开链接 我下载的是3.5 你也可以下载其他版本的
Pycharm(是IDE)安装:点击打开链接
pyqt5 安装:点击打开链接
另外最好用火狐浏览器,查看 调试好点。
(一)好啦,准备好了,就让我们写一个最基本爬虫,爬取一个网页的图片。
我们就爬这个网页的所有图片
先按F12,再按F5查看,如下图
再点击对应的网页
这样我们获取网页的基本信息已经都做完了,就可以敲代码了。注意:代码要对齐,不然pycharm会报错。
#导入正则模块 用于匹配
import re
#导入请求模块 向网页请求的
import urllib.request
#通过url获取网页 def 这是一个函数定义头 getHtml函数名 url函数参数
def getHtml(url):
"""
通过url获取html地址 #函数说明
:param url:
:return: html
"""
#headers 网页的请求头 防止反爬虫(骗服务器,是浏览器在请求,而不是机器人在请求) 在对应的网页 按F12调试查看
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0',
}
#请求 返回req
req = urllib.request.Request(url, headers =headers)
#打开req返回一个网页
html = urllib.request.urlopen(req).read()
return html
#通过正则表达式来获取图片地址,并下载到本地
def getImg(html):
"""
根据reg获取图片,并下载到本地
:param html:
:return: imglist
"""
# 定义图片正则 规则
reg = r'src="(.+?\.jpg)"'
#匹配
imgre = re.compile(reg)
#找到图片列表
imglist = re.findall(imgre, html)
#x图片编号
x = 1
for imgurl in imglist:
print(imgurl)
#通过urlretrieve函数把数据下载到本地的D:\\images,所以你需要创建目录
urllib.request.urlretrieve(imgurl, './images/'+'%s.jpg'%x)
x = x + 1
return imglist
def get():
html = getHtml("https://tieba.baidu.com/p/5680688545")
#记得加上这句 不然会乱码 编码格式看网页源代码 大部分 utf-8 gbk json
html = html.decode('utf-8')
print(html)
print(getImg(html))
if __name__ == "__main__":
get()
里面加了好多注释,代码是很短的,实际代码也只有十几行。另外我忘了加入Sleep函数了,加上的话会变慢,不过这样能够保证持续爬取,如果过快爬取的话,服务器会认为你频繁访问而暂停你的请求。
会爬一个网页的图片就可以爬多个网页了。
其实很简单,只需要加工for循环 不断 改变gethtml里面的url的地址,不同的url对应不同的网页,就可以实现爬取不同网页的图片了。
下面我举个栗子,你们自己再试着去模仿下哈:
import re
import urllib.request
import urllib.error
from urllib.request import urlopen
import os
import operator
import time
#通过url获取网页
def getHtml(url):
"""
通过url获取html地址
:param url:
:return: html
"""
# 用于模拟http头的User-agent
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0',
}
req = urllib.request.Request(url, headers =headers)
try:
page = urlopen(req)
except urllib.error as e:
print(e)
print(222)
html = page.read().decode('utf-8')
return html
#通过正则表达式来获取图片地址,并下载到本地
def getImg(html):
""&