ajax请求图片_带你完成第一个爬虫,简单爬取百度图片

大家好,我是润森

什么是爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。(来源: 百度百科)

爬虫协议

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

robots.txt文件是一个文本文件,使用任何一个常见的文本编辑器,比如Windows系统自带的Notepad,就可以创建和编辑它。robots.txt是一个协议,而不是一个命令。robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。(来源: 百度百科)

爬虫百度图片

目标:爬取百度的图片,并保存电脑中

  • 能不能爬?

首先数据是否公开?能不能下载?

915d7887d4f0bd9a9d7e0da252c34fc8.png

从图中可以看出,百度的图片是完全可以下载,说明了图片可以爬取

  • 先爬取一张图片

首先,明白图片是什么?

有形式的事物,我们看到的,是图画、照片、拓片等的统称。图是技术制图中的基础术语,指用点、线、符号、文字和数字等描绘事物几何特征、形态、位置及大小的一种形式。随着数字采集技术和信号处理理论的发展,越来越多的图片以数字形式存储。

然后需要图片在哪里?

图片是在云服务器的数据库中的保存起来的

每张图片都有对应的url,通过requests模块来发起请求,在用文件的wb+方式来保存起来

import requestsr = requests.get('http://pic37.nipic.com/20140113/8800276_184927469000_2.png')with open('demo.jpg','wb+') as f:f.write(r.content)
  • 批量爬取

但是有谁为了爬一张图片去写代码,还不如直接去下载 。爬虫是目的就是为了达到批量下载的目的,这才是真正的爬虫

  • 网站的分析

首先了解json

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

json 就是js 的对象,就是来存取数据的东西

JSON字符串

{    “name”: “毛利”,    “age”: 18,    “ feature “ : [‘高’, ‘富’,  ‘帅’]}

Python字典

{    ‘name’: ‘毛利’,    ‘age’: 18    ‘feature’ : [‘高’, ‘富’,  ‘帅’]}

但是在python中不可以直接通过键值对来取得值,所以不得不谈谈python中的字典

导入python 中json,通过json.loads(s) -->将json数据转换为python的数据(字典)

ajax 的使用

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。

图片是通过ajax 方法来加载的,也就是当我下拉,图片会自动加载,是因为网站自动发起了请求,

824c4a116f63b45ba574addb5d84dbd2.gif

分析图片url链接的位置

9c3e1bc6ccfb9ad1ed0f17ef0f23daed.png

同时找到对应ajax的请求的url

3aa5c9566817023ae0903b71929bc22e.png

构造ajax的url请求,来将json转化为字典,在通过字典的键值对来取值,得到图片对应的url

import requestsimport jsonheaders = {    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}r = requests.get('https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=',headers = headers).textres = json.loads(r)['data']for index,i in enumerate(res):    url = i['hoverURL']    print(url)    with open( '{}.jpg'.format(index),'wb+') as f:        f.write(requests.get(url).content)
5f8f18f403e2d6a741d3b246bda3e7f9.png
  • 构造json的url,不断的爬取图片

在一个json 的有30张图片,所以发起一个json的请求,我们可以爬去30张图片,但是还是不够。

首先分析不同的json中发起的请求

https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&1561022599355=https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=

其实可以发现,当再次发起请求时,关键就是那个 pn在不断的变动

0a3bccd7422c3ca70c165de21625dd47.png

最后封装代码,一个列表来定义生产者来存储不断的生成图片url,另一个列表来定义消费者来保存图片

# -*- coding:utf-8 -*-# time :2019/6/20 17:07# author: 毛利import requestsimport jsonimport osdef get_pic_url(num):    pic_url= []    headers = {        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}    for i in range(num):        page_url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&1561022599290='.format(30*i)        r = requests.get(page_url, headers=headers).text        res = json.loads(r)['data']        if res:            print(res)            for j in res:                try:                    url = j['hoverURL']                    pic_url.append(url)                except:                    print('该图片的url不存在')    print(len(pic_url))    return pic_urldef down_img(num):    pic_url  =get_pic_url(num)    if os.path.exists('D:图片'):        pass    else:        os.makedirs('D:图片')    path = 'D:图片'    for index,i in enumerate(pic_url):        filename = path +   str(index) + '.jpg'        print(filename)        with open(filename, 'wb+') as f:            f.write(requests.get(i).content)if __name__ == '__main__':    num = int(input('爬取几次图片:一次30张'))    down_img(num)
6f8c1410e7d33af1cdba62bb54160cfd.gif
b3931be8481e2e71aba54662f1829e2b.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好!以下是一个使用 Python 爬虫动态数据的简单实例: ```python import requests from bs4 import BeautifulSoup # 用 requests 库发送请求 url = "https://example.com/dynamic_page" response = requests.get(url) # 使用 BeautifulSoup 解析响应内容 soup = BeautifulSoup(response.text, 'html.parser') # 提需要的数据 data = soup.find_all("div", class_="dynamic-data") # 打印提的数据 print(data) ``` 这个实例使用 requests 库向网站发送请求,并使用 BeautifulSoup 解析响应内容。然后,通过调用 BeautifulSoup 对象的 `find_all` 方法提需要的数据,最后通过 `print` 函数打印提的数据。 请注意,上面的代码仅作为示例,因为动态的网站的结构可能因网站而异,因此您需要根据网站的具体情况自行调整代码。 ### 回答2: Python爬虫是一种用来自动获网页信息的程序,可以用于静态或动态网页。下面是一个使用Python爬虫动态的实例: 首先,我们需要安装相关的库,如requests和BeautifulSoup。然后,我们可以使用requests库来获网页的内容,并使用BeautifulSoup库来解析网页。 假设我们需要一个动态生成的新闻网页,该网页会根据不同的页面滚动加载更多的新闻。我们可以通过模拟滚动加载的过程来动态地获所有的新闻。 首先,我们发送一个初始的请求来获第一页的新闻内容。然后,我们可以通过查看网页的源代码或使用浏览器的开发者工具来找到滚动加载时发送的请求。 接下来,我们可以分析这个请求的URL和参数,然后使用requests库来发送这个请求,并获到响应的内容。通常,这个响应的内容是一个JSON格式的数据,其中包含了新闻的信息。 我们可以使用Python的json库来解析JSON数据,并提我们需要的信息。然后,我们可以将这些信息保存到一个文件或数据库中,或者进行其他的处理。 接着,我们可以继续发送滚动加载的请求,直到获到了所有的新闻。这可以通过循环发送请求的方式来实现,每次发送请求之后,我们需要解析响应的内容,并判断是否还有更多的新闻。 最后,我们可以将所有的新闻保存到一个统一的文件中,或者根据需要进行其他的处理。 这只是一个使用Python爬虫动态简单实例,实际的应用中可能还涉及到一些其他的技术和处理方式。希望以上内容对你有所帮助! ### 回答3: Python爬虫是一种用于自动获网页数据的程序。通常情况下,我们使用爬虫来从静态网页中获数据。但是有些网站使用了JavaScript等动态技术来加载网页内容,这给爬虫来了一定的挑战。 对于动态网页,我们可以通过模拟浏览器行为来获数据。这可以通过使用Python的Selenium库来实现。Selenium可以模拟用户在浏览器中的操作,包括点击按钮、输入文本等动作。它还可以等待页面加载完成后再进行下一步操作,以确保获到完整的页面数据。 下面以一个例子来说明如何使用Python爬虫动态数据。假设我们要从一个使用了AJAX技术的网站上获电影相关信息。 首先,我们需要安装Selenium库。可以使用以下命令来安装: pip install selenium 然后,我们需要安装适合的浏览器驱动程序。Selenium支持多种浏览器,如Chrome、Firefox等。这里以Chrome浏览器为例。可以通过以下链接下载对应版本的Chrome驱动程序:https://sites.google.com/a/chromium.org/chromedriver/downloads 接下来,我们需要导入Selenium库,并配置浏览器驱动路径: from selenium import webdriver driver_path = "/path/to/chromedriver" # Chrome驱动程序路径 driver = webdriver.Chrome(driver_path) 然后,我们可以使用Selenium模拟浏览器操作,访问网页并获数据: url = "http://example.com" # 网页地址 driver.get(url) # 访问网页 # 等待数据加载完成 driver.implicitly_wait(10) # 等待10秒 # 获页面数据 data = driver.page_source 最后,我们可以对获到的数据进行解析和提,获我们需要的信息。 以上是一个简单的Python爬虫动态实例。通过使用Selenium库,我们可以模拟浏览器行为,实现对动态网页的。当然,具体的实现还需要根据具体的需求和网页情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值