记录:
2021-2022第1学期数据采集与预处理课程 课中考试
一、打开人民邮电出版社(http://www.ptpress.com.cn)主页,找到“新书推荐版块”
中对应方向的真实地址。(学号1-2选计算机,3-4选电子,依次类推。)
二、编写代码获取相关图书的基本信息“bookName”、“bookID”、“picPath”保存到excel
中,命名为“某类新书基本信息.xlsx”,例如:“计算机新书基本信息. xlsx”。
三、在第二步的基础上爬取图书的价格和库存信息,保存到Excel表中,命名为“某类新书价格库存信息表.xlsx ”,例如:计算机类新书价格库存信息表.xlsx。
代码如下:
import requests
import json
from openpyxl import workbook
# 获取分类的书籍列表
def getlist():
url='https://www.ptpress.com.cn/recommendBook/getRecommendBookListForPortal?bookTagId=780a3d85-a6da-438b-8b6a-c9c50e374e55'
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
'Cookie':'gr_user_id=796019e3-dc58-40f5-a6df-892a38008bcd; acw_tc=2760822416373059896443147efcf3dd457a5539d63a07fdafd12f3041cd93; JSESSIONID=A0FD72E84771D06417CF145392DAA679; gr_session_id_9311c428042bb76e=1a1d8cc2-0de9-4409-adc4-07de4cdb503f; gr_session_id_9311c428042bb76e_1a1d8cc2-0de9-4409-adc4-07de4cdb503f=true'
}
# 发送get请求获取相应的分类的书籍列表信息
response = requests.get(url,headers=headers)
tans_dict = json.loads(response.text)
results= tans_dict['data']
wb = workbook.Workbook()
ws = wb.active
ws.append(['bookName','bookID','picPath'])
for result in results:
ws.append([result['bookName'],result['bookId'],result['picPath']])
# wb.save('成功\励志类新书基本信息.xlsx') 报错:带有特殊字符 / ,去掉
wb.save('成功励志类新书基本信息.xlsx')
return results
# 获取书籍的价格
def price(results):
url1 = 'https://www.ptpress.com.cn/bookinfo/getBookDetailsById'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
}
Price = []
Isbn = []
for i in range(len(results)):
params = {
'bookId':results[i]['bookId']
}
# 发送post请求相对应的书本的价格和isbn
response = requests.post(url =url1,params = params,headers=headers)
tans_dict = json.loads(response.text)
data = tans_dict['data']
# 获取对应的价格
Price.append(data['discountPrice'])
# 查询库存量接口需要的传参
Isbn.append(data['bookDetail']['data']['isbn'])
return Price, Isbn
# 获取书籍的库存
def count(results,Count):
url2 = 'https://www.ptpress.com.cn/order/getBookSaleStock'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
count = []
for y in range(len(results)):
params = {
'isbn': Count[y]
}
responses = requests.post(url=url2, params=params, headers=headers)
data = responses.json()
count.append(data['data'])
wb = workbook.Workbook()
ws = wb.active
ws.append(['bookName','bookId','picPath','price', 'count'])
for i in range(len(results)):
ws.append([results[i]['bookName'], results[i]['bookId'], results[i]['picPath'],price[i],count[i]])
wb.save('成功励志类新书价格库存信息表.xlsx')
if __name__ == '__main__':
results = getlist()
price,Isbn = price(results)
count(results,Isbn)
注意:
我的分类是成功\励志,原本我是这样写的: wb.save(‘成功\励志类新书基本信息.xlsx’) ,运行就产生报错,后来查询了一番,因为有‘\’字符,python处理时将它解析成了路径,所以产生了报错,最简单的解决方法我删掉了\
运行结果:
成功励志类新书基本信息:
成功励志类新书价格库存信息表: