python动态爬虫学习

文章目录

  • 知识点
    • requests库
    • json库
    • openpyxl库
  • 爬取人民邮电出版社--精品力作板块的书籍信息
    • 思路
    • 代码

知识点

requests库

requests.get(url=url,headers=headers,params=params)
//url对应要访问的页面链接
//headers为请求头
//params当携带参数时使用
url='https://www.ptpress.com.cn'
headers={
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.51",
    "Accept-Encoding": "gzip, deflate, br"}//格式
   params={
   "bookId":bookId}//格式,params在调用需要传递接口的链接时使用
res=requests.post(url=url,headers=headers,data=data)
//data格式与params类似
res.encoding//从http header中猜测响应的内容编码方式

json库

json.loads(request.get(···).text)
//将一段JSON 形式的字符串用 json.loads转换成python的数据结构,变成列表或字典,然后进行操作
json.load('文件名')
//操作整个文件对象,将整个文件对象里面的内容转化为json对象

openpyxl库

from  openpyxl import  Workbook //创建一个xlsx
wb=Workbook()//实例化
ws=wb.worksheets[0]//打开第一个sheet
ws.save("文件.xlsx")//保存表
ws.cell(,,内容)//向表中指定行列添加内容
ws['A1':'A2']//通过切片批量访问单元格
wb.create_sheet("sheet")//创建表
sheet.max_row//最大行
sheet.max_column//最大列
from openpyxl  import load_workbook
 wb2 = load_workbook('文件名称.xlsx')

爬取人民邮电出版社–精品力作板块的书籍信息

思路

1.找到返回bookId参数的url,在目标网页打开开发者模式(F12),如果第三步所在的板块无法看见,先在检查模式下刷新网页,然后找出对应的名称,标头中对应的url即为当前板块的真实链接,在底部还可以找到对应的User-Agent。
python动态爬虫学习_第1张图片
2.获取返回值,切换到预览部分,将返回data转为字典或列表模式,获取bookName和bookId。
3.任意打开一本书,找到对应的接口url,以及携带的参数(在负载部分查看),接着按照第2步的方法继续进行。
4.保存到xlsx文件中
python动态爬虫学习_第2张图片

代码

import requests
import json
from openpyxl import Workbook

wb = Workbook()//实例化
ws = wb.worksheets[0]
url = r'https://www.ptpress.com.cn/masterpiece/getMasterpieceListForPortal'//真实链接
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.51",
    "Accept-Encoding": "gzip, deflate, br"
}//请求头
res = requests.get(url=url, headers=header)
res.encoding = 'utf-8'
result = json.loads(res.text)
lists = []
for i in result["data"]:
    list_one = []
    bookId, bookName = i["bookId"], i["bookName"]
    # print("bookId:"+bookId)
    url_price = "https://www.ptpress.com.cn/bookinfo/getBookDetailsById"
    book_data = {
        "bookId": bookId
    }
    res_one = requests.post(url=url_price, data=book_data)
    result_one = json.loads(res_one.text)
    isbn, date, price, author = result_one['data']["bookDetail"]["data"]['isbn'], \
                                result_one['data']["bookDetail"]["data"]['publishDate'], result_one['data'][
                                    'discountPrice'], result_one['data']['author']
    list_one.append(bookName)
    list_one.append(isbn)
    list_one.append(date)
    list_one.append(price)
    list_one.append(author)
    lists.append(list_one)
for list in lists:
    for i in list:
        ws.cell(lists.index(list) + 1, list.index(i) + 1, i)
wb.save("书籍详情.xlsx")

你可能感兴趣的:(python,爬虫,学习)