网络爬虫(基于python的网络爬虫批量爬取图片)

1.模拟用户向指定网站发送请求

        需要下载requests模块来模拟用户向网站发送请求,在终端输入如下指令:

pip install requests

        1> 了解网页结构

                学习网页基础(一般由三部分构成,HTML(网页基本骨架),CSS(页面样式),JS(与用户进行动态交互))

        2 > 了解爬虫

                网络爬虫(又被称为网页蜘蛛),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。其实通俗的讲就是通过程序去获取web页面上自己想要的数据,也就是自动抓取数据

        3>了解反爬

                搜索引擎可以通过爬虫抓取网页信息,进行数据分析等,但有些网站中的网页信息并不希望被爬取这里就会涉及到反爬虫技术

                反爬虫技术如下所示:

                1.通过user-Agent来控制访问(user-agent能够使服务器识别出用户的操作系统及版本、cpu类型、浏览器类型和版本,一些网站会设置user-agent名单范围,在范围内的可以正常访问),2.通过IP来限制,3.设置请求间隔,4.自动化测试工具,5.参数通过加密,6. 通过robots.txt来限制爬虫等。

2.解析网页数据

        requests 库已经可以抓到网页源码,接下来要从源码中找到并提取数据。Beautiful Soup 是 python 的一个库,其最主要的功能是从网页中抓取数据。Beautiful Soup 目前已经被移植到 bs4 库中,也就是说在导入 Beautiful Soup 时需要先安装 bs4 库。

安装好 bs4 库以后,还需安装 lxml 库。如果我们不安装 lxml 库,就会使用 Python 默认的解析器。尽管 Beautiful Soup 既支持 Python 标准库中的 HTML 解析器又支持一些第三方解析器,但是 lxml 库具有功能更加强大、速度更快的特点,因此个人推荐安装 lxml 库。

pip install bs4
pip install lxml

3.代码部分

        1> 某图片网站爬取图片具体代码如下所示:

# pip install requests
import requests
#pip install bs4 用BeautifulSoup来对HTML文档进行解析
from bs4 import BeautifulSoupclass spider():def __init__(self,url):#请求网址self.url = url#设置请求头self.headers = {"user-agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Mobile Safari/537.36"}def get(self):# 通过请求获取响应数据(此数据是html文本格式的数据)res = requests.get(self.url,headers=self.headers)html = res.text# 解析数据info = BeautifulSoup(html, "lxml")# 使用select选择器定位数据data = info.select("#thumbs > section > ul > li > figure > img")# 在解析后的数据中通过遍历的方法提取图片的url存入列表中,得到一个urllist列表urllist = []for i in data:urllist.append(i.get("data-src"))# 通过解析后的url再次发送请求获取图片for j in urllist:pictureurl = j# 图片命名name = pictureurl.split("/")[-1]response = requests.get(url=pictureurl, headers=self.headers)# 以二进制数据流的方式写入指定目录文件with open("D:\spiderPicture\%s" % name, "wb") as f:f.write(response.content)
sp = spider("https://wallhaven.cc/search?q=id:711&sorting=random&ref=fp")
sp.get()

        2> 代码详解

        对代码进行了封装方便批量爬取,首先导入两个包requests和BeautifulSoup,requests是为了模拟用户向浏览器发送请求,BeautifulSoup是为了在网页中抓取数据

url是目标网址:

 设置请求头:

 找到Request Headers中的user-agent复制粘贴

#设置请求头
self.headers = {"user-agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Mobile Safari/537.36"}

 发送请求得到响应数据:(这里的html就是HTML文本数据)

 # 通过请求获取响应数据(此数据是html文本格式的数据)res = requests.get(self.url,headers=self.headers)html = res.text

 通过BeautifulSoup解析数据:(BeautifulSoup第一个参数是要解析的数据,第二个参数是解析方方式)

# 解析数据info = BeautifulSoup(html, "lxml")

使用select选择器定位数据(我们爬取图片需要图片的url,所以需要定位url)

 复制选择器得到定位的位置:

 

Copy selector 得到:

#thumbs > section > ul > li:nth-child(1) > figure > img

但这样只是一张图片,我们要的是当页的全部图片所以这里需要改成(删掉li:后面的nth-child(1)):

#thumbs > section > ul > li > figure > img
# 使用select选择器定位数据data = info.select("#thumbs > section > ul > li > figure > img")

 data输出的结构如下:

 得到图片的地址后:新建一个列表将所有的url加入列表

# 在解析后的数据中通过遍历的方法提取图片的url存入列表中,得到一个urllist列表print(data)urllist = []for i in data:urllist.append(i.get("data-src"))

 列表如下:

 通过解析后的url再次发送请求获取图片,图片名称我们采用将url地址字符串拆分切片的方式赋值给name,最后以二进制的方式写入指定目录

# 通过解析后的url再次发送请求获取图片for j in urllist:pictureurl = j# 图片命名name = pictureurl.split("/")[-1]response = requests.get(url=pictureurl, headers=self.headers)# 以二进制数据流的方式写入指定目录文件with open("D:\spiderPicture\%s" % name, "wb") as f:f.write(response.content)

查看结果:

对另一个网站的图片批量爬取源码如下:

# pip install requests
import requests
#pip install bs4 用BeautifulSoup来对HTML文档进行解析
from bs4 import BeautifulSoupclass spider():def __init__(self,url):#请求网址self.url = url#设置请求头self.headers = {"user-agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Mobile Safari/537.36"}def get(self):# 通过请求获取响应数据(此数据是html文本格式的数据)res = requests.get(self.url,headers=self.headers)html = res.text# 解析数据info = BeautifulSoup(html, "lxml")# 使用select选择器定位数据data = info.select("#main > div.slist > ul > li > a > img")# 在解析后的数据中通过遍历的方法提取图片的url存入列表中,得到一个urllist列表print(data)urllist = []for i in data:urllist.append(i.get("src"))print(urllist)# 通过解析后的url再次发送请求获取图片for j in urllist:pictureurl = j# 图片命名# name = pictureurl.split("/")[-1]response = requests.get(url="https://pic.netbian.com"+pictureurl, headers=self.headers)# 以二进制数据流的方式写入指定目录文件global numberwith open("D:\spiderPicture\pic\%d.jpg" % number, "wb") as f:f.write(response.content)number += 1
i = 3
number = 1
while 1:url = "https://pic.netbian.com/4kmeinv/index_%d.html"%isp = spider(url)sp.get()i += 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28568.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫抓取网页图片

本文通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地。 下面就看看如何使用python来实现这样一个功能。 # -*- coding: utf-8 -*- import urllib import re import time import os#显示下载进度 def schedule(a,b,c):a:已经下载的数据块b:数据…

Python爬取淘宝图片

爬取淘女郎模特图片与相关信息 (一) 解析淘女郎首页网站地址 打开淘女郎首页界面 https://www.taobao.com/markets/mm/mm2017,点击 查看更多,然后 F12 进入网页抓包工具,按 F5观察数据加载变化。审查元素发现&#xff…

【实例】Python爬取淘宝图片

文章目录 一、分析二、代码三、效果 一、分析 》》 第一页时 》》第二页时s48,第三页时s96(每页为48的倍数) 》》当q外套时(q为关键字) 》》用于每页图片的正则表达目标 二、代码 导入请求、报错模块&正则表达式类库 f…

Python3爬虫图片抓取

(1)实战背景 上图的网站的名字叫做Unsplash,免费高清壁纸分享网是一个坚持每天分享高清的摄影图片的站点,每天更新一张高质量的图片素材,全是生活中的景象作品,清新的生活气息图片可以作为桌面壁纸也可以应…

爬虫实战 爬取谷歌图片 Google images

目标 #date:2020.5.25 #author:pmy #aim:爬取google图片 本次爬取主要是为了练习selenium。 分析 爬取的目标如下图,爬取猫猫图片 将google图片顺利爬下来。 由于google图片界面是属于那种往下划会在本页面中加载出更多信息,但未刷新的机…

Python爬虫爬取Google图片

文章目录 urlliburllib.request.urlretrieve urllib3 in python3PoolManagerRequest BeautifulSoup安装 Installation一些函数 Some functionsget_textfind_all(name, attrs, recursive, string, limit, **kwargs)name - 通过标签名搜索kwargs - keyword arguments 关键字参数进…

Python——爬虫抓取图片

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:李晓凯 * 完成日期:2019年 8 月 19 日 * 版 本 号:v1.0 * * 问题描述: * 输入描述: * 程…

python爬虫(爬取图片)

在家无聊写的爬虫程序,用来爬取图片,由于这个是好久之前写的,有点忘了,写的不详细,后面再写一份详细的 爬虫的基本原理就是: 发起请求->获取响应->解析内容->保存数据 第一步:发…

面试常见题(荷兰国旗问题

面试常见题&#xff0c;荷兰三色国旗问题 挺有意思的 #include<bits/stdc.h> using namespace std; int main(){vector<int>str{2, 3, 1, 9, 7, 6, 1, 4, 5,4};int nstr.size();int target4;int l-1,rn;int p0;//这里不能是l<r哦&#xff0c;p代表数组遍历指针…

快速排序之荷兰国旗问题

描述 荷兰国旗有三横条块构成&#xff0c;自上到下的三条块颜色依次为红、白、蓝。现有若干由红、白、蓝三种颜色的条块序列&#xff0c;要将它们重新排列使所有相同颜色的条块在一起。本问题要求将所有红色的条块放最左边、所有白色的条块放中间、所有蓝色的条块放最右边。 …

从糖尿病捆绑支付看荷兰整合医疗

来源:中国数字科技馆 所谓捆绑支付模式,是指对于患有特定疾病的患者,在涉及多个照护提供方的时候,通过单一途径即可支付所接受的所有服务。在荷兰,随着老年人口及慢性疾病患者的增加,整合医疗开始受到政策决策者和保健提供者的关注,并将整合医疗定位为有前瞻性的、多学…

荷兰旗问题(三色旗排序)

摘要&#xff1a; 荷兰旗问题是三色排序&#xff0c;即某一组数据&#xff0c;元素的值只能为a,b ,c。把这组数据按照a, b, c的顺序排序。 本文介绍了一种时间复杂度为O&#xff08;n&#xff09;&#xff0c;空间复杂度O&#xff08;1&#xff09;的算法。 1. 问题描述 某…

荷兰国旗问题(分三块)

在说 “荷兰国旗” 问题之前&#xff0c;首先来看一个引例。 给定一个数组arr&#xff0c;和一个数num&#xff0c;请把小于等于num的数放在数组的左边&#xff0c;大于num的数放在数组的右边。要求额外空间复杂度O(1&#xff09;,时间复杂度 O(N&#xff09; 分析&#xff1…

荷兰国旗问题

Cousera Algorithms PartI第二周课后问答题&#xff0c;有这样一道题&#xff0c;当时没什么想法&#xff0c;直到学了第三周的归并排序&#xff0c;才弄明白要怎么做&#xff0c;这里记录一下自己的想法与最终代码。 问题描述 简而言之&#xff0c;这道题就是有红白蓝三种颜…

算法:荷兰国旗问题

什么是荷兰国旗问题 荷兰国旗是由红白蓝3种颜色的条纹拼接而成&#xff0c;如下图所示&#xff1a; 假设这样的条纹有多条&#xff0c;且各种颜色的数量不一&#xff0c;并且随机组成了一个新的图形&#xff0c;新的图形可能如下图所示&#xff0c;但是绝非只有这一种情况&am…

快排-荷兰国旗

在使用partition-exchange排序算法时&#xff0c;如快速排序算法&#xff0c;我们会遇到一些问题&#xff0c;比如重复元素太多&#xff0c;降低了效率&#xff0c;在每次递归中&#xff0c;左边部分是空的(没有元素比关键元素小)&#xff0c;而右边部分只能一个一个递减移动。…

BUUCTF 荷兰宽带数据泄露

题目 RouterPassView RouterPassView官方下载-RouterPassView中文免费版-华军软件园 ​ RouterPassView,大多数现代路由器允许您备份到一个文件路由器的配置&#xff0c;然后从文件中恢复配置时的需要。路由器的备份文件通常包含了像您的ISP的用户名重要数据/密码&#xff0c…

荷兰国旗问题以及快速排序

文章目录 一、荷兰国旗问题1、啥是荷兰国旗问题2、荷兰国旗问题的抽象3、解决的思路4、详细的参考代码 二、快速排序1、啥是快排&#xff08;排序流程&#xff09;2、抽象后的快排流程3、详细的参考代码 大家好&#xff0c;我是周一。 最近几篇算法&#xff0c;我们都是聊的归…

拍卖理论 英式拍卖 和 荷兰式拍卖 是什么

拍卖理论 源自Vickrey&#xff08;1961&#xff09;的早期研究&#xff0c;其因此获得1996年的诺贝尔经济学奖。 目标一般为&#xff1a;拍卖人的收益最大化、社会的整体效率最优化 对科研和商业方面有非常价值 英式拍卖 又称增价拍卖。拍品的起拍价格即最低期望价格&#…

谈腾讯地图web api如何实现类似百度地图内置的城市切换、关键字输入提示功能

PC WEB端新增客户的时候需要填写客户地址和联系人信息&#xff0c;包括&#xff1a;省市区、街道、详细地址和经纬度以及联系人、固话和移动电话。获取客户地址信息之前用的是百度地图&#xff0c;由于小程序中客户拜访时&#xff0c;需要对客户进行定位、距离计算&#xff0c;…