Ajax原理
在用requests抓取页面时,得到的结果可能和浏览器中看到的不一样:在浏览器中可以正常显示的页面数据,但用requests得到的结果并没有。这是因为requests获取的都是原始 HTML文档,而浏览器中页面
则是经过Ajax处理数据后生成的。这些数据可能在HTML文档中,也可能是经过JavaScript和特定算法后生成的。
刚开始HTML文档中不包含某些数据,当原始页面加载完后,会向服务器发送Ajax请求获取数据,这些数据被JavaScript处理形成一些新页面。
Ajax: 即异步的JavaScript和XML,是利用JavaScript在保证页面不刷新、链接不改变的情况下与服务器交换数据的并更新
部分网页的技术。
示例:用Ajax爬取今日头条图片
最近想买工装裤穿,可又不知道怎么搭配,所以就用爬虫爬下头条上工装裤的穿搭图片啦
(1) 获取网页页面的JSON文档
import os import requests from urllib.parse import urlencode #来构造url参数的 from hashlib import md5 #用来解析图片二进制的 #获取页面json def get_page(offest): params={ 'aid':'24', 'offest':offest, 'format':'json', 'keyword':'%E5%B7%A5%E8%A3%85%E8%A3%A4', 'autoload':'true', 'count':'20', 'cur_tab':'1', 'from':'search_tab', 'pd':'synthesis' } url='upload/201902131558566754.jpg中 f.write(response.content) else: print('Already Download',file_path) except requests.ConnectionError: print('Failed to save image') 注意:
1)这里的item就是(2)中得到的包含url和标题的字典
1)是以二进制写的方式存入文件,'wb'
(4)构造offest 进行遍历
def main(offest): json=get_page(offest) for item in parse_page(json): print(item) save_image(item) if __name__=='__main__': for i in range(0,4): offest=i*20 main(offest) 