定义
请求网站并提取数据的“自动化”程序
数据的获取方式
爬虫分类
1、通用网络爬虫:百度、谷歌
2、聚焦爬虫
3、增量爬虫
4、深层爬虫
作用范围
1、可见即可爬
2、看不到的也可爬,但是一定要合法
3、君子协议:打开一个浏览器 再在后面输入 /robots.txt
‘/’ 表示所有,是所有都不能爬取
‘*’ 表示
User-agent: 表示允许所有搜索引擎蜘蛛百来爬行抓取,也可以把去掉,改为特定某一个或者某些搜索引擎蜘蛛来爬行抓取,如百度是Baiduspider,谷歌是Googlebot。
Robots协议
Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
技术扫盲
1、客户端:上网的用户,例如:逛淘宝的我们
2、服务端:提供网站的商家,例如:阿里巴巴
逛网站的流程:
1、客户端 向 服务器 发送请求
2、服务器收到请求后,返回一个响应
其中: 客户端就是我们电脑上的浏览器软件,网址相当于目标服务器。服务器本质是别人的电脑的一个软件
3、请求:由客户端发送到服务器的一个信息,用于申请网页
4、响应:由服务器返回到客户端的一个信息,一般是网页,字符串,图片,音乐等内容
摘自:https://blog.csdn.net/qq_40949713/article/details/80512339#commentBox
乐趣:myqr 生成动态二维码
python是所有编程语言中模块最丰富的
生活中常见的二维码功能在使用python第三方库来生成十分容易
第一种
三个大矩形是定位图案,用于标记二维码的大小。这三个定位图案有白边,通过这三个矩形就可以标识一个二维码了。
安装导入QRCode
pip install qrcode #方法多,体量小
import qrcode
qrcode.make("不睡觉干嘛呢").get_image().show() #设置URL必须添加http://
第二种
安装导入myqr库:
pip install myqr #操作简单,功能强大
QRCode 多种自定义方法
import qrcode
text = input("输入文字或URL:")
img =qrcode.make(text)
img.save() #保存图片至本地目录,可以设定路径
img.show()
实现代码
另外需要注意,你的动图需要跟你现在操作的py是在同一个文件夹
from MyQR import myqr
#扫描后的网址
url='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1587142315905&di=6b42d8639d4fcb3f757db047bc845a38&imgtype=0&src=http%3A%2F%2Fpic1.win4000.com%2Fpic%2F3%2F2e%2Fea73d22e36.jpg'
#动态/静态的图片
pic='lelephoto.jpg'
#生成后的图片名字 (好像不能为jpg,因为我之前报错了)
pict='lelecode.png'
myqr.run(
words=url, #跳转的链接
version=5, #容错率
level='M', #控制纠错水平
picture=pic, #动图
colorized=True, #黑白(False)还是彩色(True)
contrast=1.0, #对比度
brightness=1.0, #亮度
save_name=pict #生成图片名字
)
第三种
官方文档
Positional parameter
words: str
Optional parameters
version: int, from 1 to 40
level: str, just one of ('L','M','Q','H')
picutre: str, a filename of a image
colorized: bool
constrast: float
brightness: float
默认输出文件名是“ qrcode.png ",而默认存储位置是当前目录
save_name: str, the output filename like 'example.png'
save_dir: str, the output directory
作业编码题
请编写一个爬虫程序,爬取100张狗狗图片(网站不限,注意分页操作)
import requests,re
flag=True
pn=0
n=0
while(flag):
url=f'https://image.baidu.com/search/acjson?tn=resultjson_com&\
ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%8B%97&cl=2&lm=-1&\
ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&word=%E7%8B%97&\
s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&\
force=&pn={pn}&rn=30&gsm=1e&1587142840602=' #{} f
pn+=30
headers={
'Referer':'https://image.baidu.com/'
}
try:
#向目标网页发送请求
response=requests.get(url=url,headers=headers)
#print(response.text)
#获取网页的文本形式
data=response.text
#用正则表达式,筛选出所有的图片链接
image_urls=re.findall('thumbURL":"(https://.*?.jpg)',data) #规则 数据 取几个加几个点,用*是贪婪模式,?表示尽量少取,废话不要
#遍历图片的路径
#for i in image_urls:
# print(i)
#再次发送请求,获取图片
for url in image_urls: #url:某一个图片的地址
n+=1
response_image=requests.get(url=url,headers=headers)
#使用二进制形式保存图片
with open('image/%s.jpg'%n,'wb') as f: #%s是占位,由后面数的决定 起名字 写进来 二进制 (必须)
#将二进制文件存入本地 #获取图片的二进制文件
f.write(response_image.content)
if(n==100):
flag=False
break
print('执行完毕,图片已经存储')
except:
print('全部执行完毕,已完成爬虫程序')