首先介绍python中xlwt库
- 引入xlwt包
import xlwt
- 创建简单的工作表
# 创建工作簿
workBook = xlwt.Workbook("UTF-8")
# 创建工作表
oneWorkSheet = workBook.add_sheet("sheet1")
# 写入数据(行, 列, 数据)
oneWorkSheet.write(0, 0, "hello")
oneWorkSheet.write(0, 1, "xlwt")
# 保存数据,入参为文件路径
workBook.save("myExcel.xls")
- 效果如图
接下来进入正题
在爬取网页信息前需要找到网页某些数据的请求的url
比如下面的网页
我们打开网页然后右击检查->network->然后选择fetch/XHR
就可以看到这个网页的所有请求了
随便选一个请求点开就有请求的基本信息:
Headers:
请求的url,请求方式(get/post/update/delete),还有一些请求头信息,响应头信息
Response:
然后点response可以看到某个请求返回的响应数据,也就是一些展示在页面的数据
现在要爬取网页的图书价格以及库存
1. 首先通过请求url获取到这些图书的图书id,并把图书Id保存在一个list里
# TODO 先获取图书id
book_id_list = []
url = requests.get("https://www.ptpress.com.cn/recommendBook/getRecommendBookListForPortal?bookTagId=e03b1ec7-466e-484c-865c-6738989e306a")
res = json.loads(url.text)
res_data = res['data']
for i in range(len(res_data)):
book_id_list.append(res_data[i]['bookId'])
2. 通过图书Id来获取图书的ISBN和价格(获取库存的那个请求需要携带ISBN参数),并加入进list里
# TODO 获取图书ISBN和价格
isbn_list = []
price_list = []
for i in range(len(res_data)):
data_post_id = {
"bookId": book_id_list[i],
}
url = requests.post("https://www.ptpress.com.cn/bookinfo/getBookDetailsById", data=data_post_id)
res = json.loads(url.text)
book = res['data']
isbn_list.append(book['bookDetail']['data']['isbn'])
price_list.append(book['discountPrice'])
3. 通过获取到的ISBN当作参数来获取图书库存
# TODO 获取库存
last_num_list = []
for i in range(len(res_data)):
data_post_isbn = {
"isbn": isbn_list[i],
}
url = requests.post("https://www.ptpress.com.cn/order/getBookSaleStock", data=data_post_isbn)
res = json.loads(url.text)
book = res['data']
last_num_list.append(book)
4. 最后将信息存到excel表格里面
# 存入excel
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('计算机类新书价格库存信息表', cell_overwrite_ok=True)
worksheet.write(0, 0, '图书价格')
worksheet.write(0, 1, '库存数量')
for i in range(len(res_data)):
worksheet.write(i+1, 0, price_list[i])
worksheet.write(i+1, 1, last_num_list[i])
workbook.save('计算机类新书价格库存信息表.xls')
5.整体的代码展示
import json
import requests
import xlwt
def get_price_num():
# TODO 先获取图书id
book_id_list = []
url = requests.get("https://www.ptpress.com.cn/recommendBook/getRecommendBookListForPortal?bookTagId=e03b1ec7-466e-484c-865c-6738989e306a")
res = json.loads(url.text)
res_data = res['data']
for i in range(len(res_data)):
book_id_list.append(res_data[i]['bookId'])
# TODO 获取图书ISBN和价格
isbn_list = []
price_list = []
for i in range(len(res_data)):
data_post_id = {
"bookId": book_id_list[i],
}
url = requests.post("https://www.ptpress.com.cn/bookinfo/getBookDetailsById", data=data_post_id)
res = json.loads(url.text)
book = res['data']
isbn_list.append(book['bookDetail']['data']['isbn'])
price_list.append(book['discountPrice'])
# TODO 获取库存
last_num_list = []
for i in range(len(res_data)):
data_post_isbn = {
"isbn": isbn_list[i],
}
url = requests.post("https://www.ptpress.com.cn/order/getBookSaleStock", data=data_post_isbn)
res = json.loads(url.text)
book = res['data']
last_num_list.append(book)
# 存入excel
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('计算机类新书价格库存信息表', cell_overwrite_ok=True)
worksheet.write(0, 0, '图书价格')
worksheet.write(0, 1, '库存数量')
for i in range(len(res_data)):
worksheet.write(i+1, 0, price_list[i])
worksheet.write(i+1, 1, last_num_list[i])
workbook.save('计算机类新书价格库存信息表.xls')
if __name__ == '__main__':
get_price_num()