龙空技术网

根据输入的关键词爬图虫创意图片

人生易短我用python 204

前言:

今天姐妹们对“ajax向后台传递数据流”大约比较珍视,各位老铁们都需要了解一些“ajax向后台传递数据流”的相关知识。那么小编同时在网络上汇集了一些对于“ajax向后台传递数据流””的相关内容,希望咱们能喜欢,姐妹们快快来了解一下吧!

今天我们来爬一下VCG视觉中国的图库

首页有个输入框当我们输入关键词的时候就会和服务器进行通信使用ajax和后台进行数据传送

首先我们来梳理一下爬图片的思路:

第一:

先在输入框里面输入关键词我们来按键盘的f12来看看控制台的数据流

第二:

点击Network下面的All完了会出来很多数据然后我们点击数据的第一条,是这样的;phrase=%E7%BE%8E%E5%A5%B3&rand=A065H1_dc863e2c60e9539962ab5cf2e65ae78bpage是页数是后台给前端传过来的分页参数 phrase是关键字 采用的是get方式和后台进行交互2:然后我们可以开始爬啦图片啦因为图片的地址找到分页的数据也找到啦 ajax和后台的传输方式也找到按道理是可以爬啦,小编兴高采烈的开始爬图片但是后来发现地址不对因为返回的数据和看到的数据不在一个url里面3:后来小编发现真正的地址不在All里面而是在XHR里面的在XHR里面的第三个url里面了,然后我们就可以开始写代码啦第一步先把我们需要的库倒进来

import re 是正则库

import time 时间库

from urllib.parse import urlencode 拼接分页库

import asyncio 异步加载库

3.然后写一个函数

def tuchong():

print('12')

if __name__ == '__main__':

tuchong()

4. 然后找到这个真正的图片地址的url=‘;phrase=%E7%BE%8E%E5%A5%B3&rand=A065H1_dc863e2c60e9539962ab5cf2e65ae78b&keyword=%E7%BE%8E%E5%A5%B3’

5.为了骗过反爬虫机制使用headers头部信息和cookie

headers = {

"user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3610.2 Safari/537.36",

"upgrade-insecure-requests": "1",

"referer": "",

"Host": "",

}

下面是你们自己的cookie信息

6.然后就是使用 requests库进行通信

html = requests.get(url, headers=headers, timeout=30, verify=False)verify=False是 绕过https timeout=30是给一个限制超过30s就断开连接

7.html.encoding = 'utf-8' 是回来的数据为utf-8也就是中文

8.html_js =(html.text) 返回数据信息

9.然后使用re正则库把图片地址给匹配出来

html_re = re.findall('"equalh_url":"(.*?)"',html_js)

10.link = 'https:'

11.然后写一个for v in html_re:

12. a = (v)把全部的数据循环出来,因为循环出来的数据是没有https:

13.所以把link 放在正则下边for上边这样就是给返回来的数据前面加个https:

html_re = re.findall('"equalh_url":"(.*?)"',html_js)

link = 'https:'

14.然后写一个for v in html_re:

a = (link +v)

15.然后就是以二进制去保存下载

b = requests.get(a) 在使用requests库

c = b.content

op = open(r'e:/python/爬完数据存放地址/壁纸/图虫%d.png'%s, 'wb') 保存

print('正在下载', a) 写一个正在下载那条数据

op.write(c)下载

第四:

这只是把第一页数据拿回来啦如果拿分页了,

shuru = input('请输入关键词:') 写一个输入关键词

for x in range(1, 100): 写一个for循环开始循环1,100就是1到99页

data = {

"term": shuru, 这是url里面的参数

"page": x, 这是分页

"phrase": shuru,

"rand": "A065H1_dc863e2c60e9539962ab5cf2e65ae78b",

"keyword": "美女"

}

url = '?' + urlencode(data)然后使用 from urllib.parse import urlencode来给url拼接

第五:

下面是全部代码

import requestsimport reimport timefrom urllib.parse import urlencodeimport asynciodef tuchong(): s = 1 shuru = input('请输入关键词:') for x in range(1, 100): data = { "term": shuru, "page": x, "phrase": shuru, "rand": "A065H1_dc863e2c60e9539962ab5cf2e65ae78b", "keyword": "美女" } url = '?' + urlencode(data) # url = ';phrase=%E7%BE%8E%E5%A5%B3&rand=A065H1_dc863e2c60e9539962ab5cf2e65ae78b&keyword=%E7%BE%8E%E5%A5%B3' headers = { "user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3610.2 Safari/537.36", "upgrade-insecure-requests": "1", "referer": "", "Host": "", "cookie": "acw_tc=3ccdc16215476410286728416e7002eb17c180b3f2d2e999065a0ddf6bfd79; sajssdk_2015_cross_new_user=1; _ga=GA1.2.1255146434.1547640978; _gid=GA1.2.1580122303.1547640978; Hm_lvt_0af14db9b5993b4879812c54f6cf147d=1547640986; Hm_lpvt_0af14db9b5993b4879812c54f6cf147d=1547640986; api_token=ST-705-af3df61b44e57abb06f1ad6dca5f71285; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22344378eae4fd096bf2cb16452f27e4370%22%2C%22%24device_id%22%3A%22168569734a437d-02577810b0b2f2-19187552-1049088-168569734a51b3%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%2C%22first_id%22%3A%22168569734a437d-02577810b0b2f2-19187552-1049088-168569734a51b3%22%7D; _gat_gtag_UA_112420443_1=1", } html = requests.get(url, headers=headers, timeout=30, verify=False) html.encoding = 'utf-8' html_js =(html.text) html_re = re.findall('"equalh_url":"(.*?)"',html_js) link = 'https:' for v in html_re: a = (link+v) b = requests.get(a) c = b.content op = open(r'e:/python/爬完数据存放地址/壁纸/图虫%d.png'%s, 'wb') print('正在下载', a) op.write(c) s+=1if __name__ == '__main__': start = time.time() loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(tuchong())) loop.close() print('[info]耗时:%s' % (time.time() - start))

标签: #ajax向后台传递数据流