python网络爬虫——爬取人民邮电出版社新书推荐信息

这段代码是一个爬取人民邮电出版社新书推荐信息的程序。它使用requests库发送HTTP请求,获取新书列表和每本书的详细信息,然后将数据保存到Excel文件中。具体的步骤如下:

  1. 导入所需的库:requests、json和openpyxl。
  2. 定义了一个URL变量,用于发送GET请求获取新书推荐列表的数据。
  3. 设置请求头信息,包括User-Agent和Cookie。
  4. 使用requests库的get()方法发送HTTP请求,并将响应内容解析为JSON格式。
  5. 定义了一个函数save_excel(),用于创建Excel文件并保存数据。在该函数中,首先创建一个Workbook对象和一个Worksheet对象。
  6. 在Worksheet对象中创建一个标题行,然后遍历新书列表中的每本书,调用json_detail()函数获取每本书的详细信息并保存到Excel中。
  7. 最后,使用openpyxl库的save()方法保存工作簿为Excel文件。
  8. 定义了一个函数json_detail(),用于获取每本书的详细信息。在该函数中,使用POST方法发送HTTP请求,并通过bookId参数指定要获取的书的ID。
  9. 解析响应内容为JSON格式,获取书的作者和折扣价格,并返回这些信息。
  10. 在最后调用save_excel()函数,将获取的数据保存到Excel文件中。

代码可以分为以下几个部分进行分块分析:

  1. 导入库
import requests
import json
import openpyxl

在这一部分中,导入了需要使用的库 requestsjson 和 openpyxl

  1. 定义请求URL和请求头信息
url = 'https://www.ptpress.com.cn/recommendBook/getRecommendBookListForPortal?bookTagId=d5cbb56d-09ef-41f5-9110-ced741048f5f'
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 Edg/95.0.1020.44',
    'Cookie': '...'
}

在这部分中,定义了请求的URL和请求头信息。URL是获取新书推荐信息的接口地址,headers包含了User-Agent和Cookie等信息。

  1. 发送请求获取JSON数据并解析
text_json = requests.get(url=url, headers=headers)
res = json.loads(text_json.content)

通过发送GET请求,获取新书推荐的JSON数据。然后将JSON数据解析为Python对象,并将其存储在变量 res 中。

  1. 定义保存到Excel的函数 save_excel
def save_excel(res):
    wb1 = openpyxl.Workbook()
    sheet = wb1.active
    sheet.title = "人民邮电新书推荐"
    title = ['书名', '作者', '价格']
    sheet.append(title)

    for re in res['data']:
        author, discountPrice = json_detail(re['bookId'])
        sheet.append([re['bookName'], author, discountPrice])

    wb1.save('生活类新书基本信息.xlsx')

这个函数用于将新书推荐信息保存到Excel文件。在函数内部,首先创建一个Excel工作簿,然后创建一个名为 “人民邮电新书推荐” 的工作表。接下来,添加表头信息到工作表中。然后,遍历每个书籍的信息,通过调用 json_detail 函数获取书籍的详细信息,并将其添加到工作表中。最后,保存Excel文件。

  1. 定义获取书籍详细信息的函数 json_detail
def json_detail(bookid):
    url = 'https://www.ptpress.com.cn/bookinfo/getBookDetailsById'
    params = {
        'bookId': bookid,
    }
    text_json = requests.post(url=url, headers=headers, params=params)
    res = json.loads(text_json.content)['data']
    author = res['author']
    discountPrice = res['discountPrice']
    print(res['bookName'], author, discountPrice)
    return author, discountPrice

这个函数用于通过书籍ID获取书籍的详细信息。在函数内部,首先构建获取书籍详细信息的接口URL,并设置书籍ID参数。然后,通过发送POST请求,获取书籍详细信息的JSON数据。接着,将JSON数据解析为字典,并提取出书籍的作者和折扣价格。最后,输出书籍的名称、作者和折扣价格,并将作者和折扣价格作为返回值返回。

  1. 调用保存到Excel的函数
save_excel(res)

在这部分代码中,调用了 save_excel 函数,将新书推荐信息保存到Excel文件中。

完整代码:

import requests
import json
import openpyxl

url = 'https://www.ptpress.com.cn/recommendBook/getRecommendBookListForPortal?bookTagId=d5cbb56d-09ef-41f5-9110-ced741048f5f'
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 Edg/95.0.1020.44',
    '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'
}
text_json = requests.get(url=url, headers=headers)
res = json.loads(text_json.content)


def save_execl(res):
    wb1 = openpyxl.Workbook()
    sheet = wb1.active
    sheet.title = "人民邮电新书推荐"
    title = ['书名', '作者', '价格']
    sheet.append(title)

    for re in res['data']:
        author, discountPrice = json_detail(re['bookId'])
        sheet.append([re['bookName'], author, discountPrice])

    wb1.save('生活类新书基本信息.xlsx')


def json_detail(bookid):
    url = 'https://www.ptpress.com.cn/bookinfo/getBookDetailsById'
    bookid = bookid
    params = {
        'bookId': bookid,
    }
    text_json = requests.post(url=url, headers=headers, params=params)
    res = json.loads(text_json.content)['data']
    author = res['author']
    discountPrice = res['discountPrice']
    print(res['bookName'], author, discountPrice)
    return author, discountPrice


save_execl(res)

猜你喜欢

转载自blog.csdn.net/weixin_66547608/article/details/134126857
今日推荐