【实验目的】

1、获取不凡商业数据标题,标题图片信息,发布时间等。

2、掌握PyCharm创建python项目。

3、掌握requests模块的基本使用。

4、掌握如何处理json数据格式。

【实验原理】

1、用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件;
2、然后浏览器从head标签开始逐行解析HTML代码,遇到link标签又会向服务器请求加载css文件,不过这个过程是异步 的,有多个css文件,会多个同时加载;
3、继续往后如果遇到script标签或者js文件就会立即执行它,而且js文件的加载是同步的;
4、到了body标签就开始渲染页面了,按照从头到尾的顺序依次渲染dom元素,如果遇到img标签会异步向服务器发送请求加载图片文件,执行此过程时浏览器会继续渲染页面,因为加载图片文件是异步的;
5、如果遇到了dom节点的变化,元素尺寸变化,浏览器不得不回头重新渲染这部分代码;
6、不同于css文件,js是阻塞式的加载,当浏览器在执行js代码时,不会做其他的事情。只有js代码执行后,才会继续渲染页面。所以应该把js放到页面的底部。

【实验环境】

Linux Ubuntu 16.04
Python 3.5
PyCharm

【实验步骤】

1、双击打开开发工具PyCharm,创建一个python项目

3.2 Python爬取不凡商业动态数据 - 图1

2、创建一个项目起名为BuFan,指定项目存储的位置,指定对应的解释器。

3.2 Python爬取不凡商业动态数据 - 图2

3.右键点击BuFan,选择New=>Python File,创建名为bufan的python文件。

3.2 Python爬取不凡商业动态数据 - 图3
3.2 Python爬取不凡商业动态数据 - 图4

4.本次实验的目标地址如下:

https://www.xfz.cn/
3.2 Python爬取不凡商业动态数据 - 图5

5、按下F12打开开发工具进行查找网页元素,点击XHR进行分析。点击弹出的路径进行分析,找到对应的信息来源地址进行分析,

https://www.xfz.cn/api/website/articles/?p=3&n=20&type=
3.2 Python爬取不凡商业动态数据 - 图6

6、代码展示,分析动态数据接口。

  1. # bufan_requests.py
  2. __author__ = 'zhangyu'
  3. import requests
  4. import json
  5. # send a http request.
  6. response = requests.get('https://www.xfz.cn/api/website/articles/?p=3&n=20&type=')
  7. json_dict = response.json() # get a HttpResponse
  8. json_str = json.dumps(json_dict) # dict---> json_str
  9. with open('bufan.json', 'w', encoding='utf-8') as fp: # write file
  10. fp.write(json_str)

7、读取json文件,分析json数据格式,拿到对应的自己想要的数据。先将json数据格式进行解码为utf-8。

  1. import json
  2. with open('bufan.json', 'r') as fp:
  3. json_data = fp.read() # read a file
  4. json_dict = json.loads(json_data, encoding='utf-8')
  5. for article_msg in json_dict['data']:
  6. print(article_msg['title'])

8、获取到前10次请求所需要的数据。通过加入循环进行遍历,处理json字符串数据。

  1. wait_times = [10, 20, 13, 14, 18]
  2. for index in range(1, 11): # set pageNum
  3. print('Download the %s link, please wait a moment...' % index)
  4. base_url = 'https://www.xfz.cn/api/website/articles/?p={}&n=20&type='
  5. response = requests.get(base_url.format(index))
  6. time.sleep(random.choice(wait_times)) # random choice a time.
  7. json_dic = response.json()
  8. json_str = json.dumps(json_dic)
  9. with open('bufan_data_%s.json' % index, 'w', encoding='utf-8') as fp:
  10. fp.write(json_str)
  11. print('the %s dowload over......' % index)

9.完整代码为:

  1. import json
  2. import requests
  3. import random # random model
  4. import time
  5. wait_times = [10, 20, 13, 14, 18]
  6. for index in range(1, 11): # set pageNum
  7. print('Download the %s link, please wait a moment...' % index)
  8. base_url = 'https://www.xfz.cn/api/website/articles/?p={}&n=20&type='
  9. response = requests.get(base_url.format(index))
  10. time.sleep(random.choice(wait_times)) # random choice a time.
  11. json_dic = response.json()
  12. json_str = json.dumps(json_dic)
  13. with open('bufan_data_%s.json' % index, 'w', encoding='utf-8') as fp:
  14. fp.write(json_str)
  15. print('the %s dowload over......' % index)
  16. # 点击右键run,运行程序。

3.2 Python爬取不凡商业动态数据 - 图7

【实验结果展示】

3.2 Python爬取不凡商业动态数据 - 图8
本次实验任务到此结束,请同学们课下反复练习,熟悉json字符串的处理。