# 首先通过审查元素找到动态网站请求地址
# 通过requests访问该地址
# 再使用Json对这些数据进行解析
import requests
import json
# 访问的请求地址
url="https://www.ptpress.com.cn/hotBook/getHotBookList?parentTagId=75424c57-6dd7-4d1f-b6b9-8e95773c0593&rows=18&page=1"
# 获取服务器返回的动态网站数据
data=requests.get(url).text
# 转换json格式
d=json.loads(data)
# 解析第一层,获取参数名字叫data的里面的数据内容
param=d["data"]
#解析图书列表
books=param["rows"]
# 循环遍历所有图书信息
for book in books:
#获取图片地址
imagePath=book["picPath"]
#获得图书价格
price=book["price"]
# 折扣后的价格
discountPrice=book["discountPrice"]
# 折扣率
bookDiscount=book["bookDiscount"]
# 图书名称
bookName=book["bookName"]
# 图书编号
bookId=book["bookId"]
# 将爬取的数据打印在控制台
print("图片地址:",imagePath,
"图书价格:",price,
"折扣后的价格:",discountPrice,
"折扣率:",bookDiscount,
"图书名称:",bookName,
"图书编号:",bookId)
print("\n")
将爬取的数据存储至数据库
# 首先通过审查元素找到动态网站请求地址
# 通过requests访问该地址
# 再使用Json对这些数据进行解析
import requests
import json
def one():
# 访问的请求地址
url="https://www.ptpress.com.cn/hotBook/getHotBookList?parentTagId=75424c57-6dd7-4d1f-b6b9-8e95773c0593&rows=18&page=1"
# 获取服务器返回的动态网站数据
data=requests.get(url).text
# 转换json格式
d=json.loads(data)
# 解析第一层,获取参数名字叫data的里面的数据内容
param=d["data"]
#解析图书列表
books=param["rows"]
two(books)
# 定义方法,将爬取的动态数据添加至数据库
import pymysql
def two(books):
#获得数据库连接
con=pymysql.connect(host="127.0.0.1",port=3306,
user="root",password="root",
db="books",charset="utf8")
# 获得游标
cursor=con.cursor()
#循环获取所有图书数据添加至数据库
# 循环遍历所有图书信息
for book in books:
# 获取图片地址
imagePath = book["picPath"]
# 获得图书价格
price = book["price"]
# 折扣后的价格
discountPrice = book["discountPrice"]
# 折扣率
bookDiscount = book["bookDiscount"]
# 图书名称
bookName = book["bookName"]
# 图书编号
bookId = book["bookId"]
#将解析的数据添加至数据库
cursor.execute("insert into tb_book values(%s,%s,%s,%s,%s,%s)",
(bookId,bookName,imagePath,price,bookDiscount,discountPrice))
#将事务进行提交
con.commit()
# 将爬取的数据打印在控制台
# print("图片地址:", imagePath, "\n",
# "图书价格:", price, "\n",
# "折扣后的价格:", discountPrice, "\n",
# "折扣率:", bookDiscount, "\n",
# "图书名称:", bookName, "\n",
# "图书编号:", bookId)
# print("\n")
# 创建程序入口
if __name__ == "__main__":
one()
爬取某本书的详细信息
# 图书详情信息爬取
import requests
import json
#指定图书id获得该图书的详细信息
def t1(bookId):
url=f"https://www.ptpress.com.cn/bookinfo/getBookDetailsById?bookId={bookId}"
# 获得该图书的详细信息
req=requests.get(url).text
# print(req)
# 使用json对爬取的动态信息进行格式转换
data=json.loads(req)
d=data["data"]
r=d["resume"]
# 获得内容简介
n_name=r["name"]
n_data=r["data"]
print(n_name)
print(n_data)
#获得图书简介
specialWord=d["specialWord"]
print(specialWord)
#获得作者
author=d["author"]
print(author)
#获得作者简介
a_name=d["authorIntro"]["name"]
a_data=d["authorIntro"]["data"]
print(a_name)
print(a_data)
#获得图书分类
bookTypeName=d["bookTypeName"]
print(bookTypeName)
# 爬取封面图片
photos=d["photos"]
# 用于存储当前图书的所有封面图片
ps=[]
for p in photos:
ps.append(p["picPath"])
print(ps)
#获得图书详情
db=d["bookDetail"]
db_name=db["name"]
print(db_name)
#书籍总页数
db_pages=db["data"]["pages"]
print(db_pages)
# 获得书籍编号
db_isbn=db["data"]["isbn"]
print(db_isbn)
# 书籍格式
db_format=db["data"]["format"]
print(db_format)
# 出版日期
db_publishDate=db["data"]["publishDate"]
print(db_publishDate)
# 版本
db_edition=db["data"]["edition"]
print(db_edition)
# 编辑者
db_executiveEditor=db["data"]["executiveEditor"]
print(db_executiveEditor)
# 书籍样式
db_frame=db["data"]["frame"]
print(db_frame)
# 书籍id
bi=d["bookId"]
print(bi)
# 获得图书目录
bookDirectory=d["bookDirectory"]
bookDirectory_data=bookDirectory["data"]
print(bookDirectory_data)
#指定图书id,获得该图书页面对应的推荐图书
def t2(bookids,rows=9):
url=f"https://www.ptpress.com.cn/bookinfo/getBookListForRecommend?bookIds={bookids}&rows={rows}"
text=requests.get(url).text
data=json.loads(text)
for d in data["data"]:
# 图书图片地址
picPath=d["picPath"]
if "specialWord" in d:
# 图书宣传广告
specialWord=d["specialWord"]
print(specialWord)
# 图书价格
price=d["price"]
# 折扣后价格
discountPrice=d["discountPrice"]
# 折扣率
bookDiscount=d["bookDiscount"]
# 书名
bookName=d["bookName"]
# 图书id
bookId=d["bookId"]
print(picPath)
print(price)
print(discountPrice)
print(bookDiscount)
print(bookName)
print(bookId)
print("-------------------------\n")
if __name__ == "__main__":
t2("5e6fe0f3-6ee7-40c2-8c25-9cdf9b0c87e6")
爬取所有图书的详细信息并存入数据库
# 图书详情信息爬取
import requests
import json
import pymysql
#指定图书id获得该图书的详细信息
def t1(bookId):
url=f"https://www.ptpress.com.cn/bookinfo/getBookDetailsById?bookId={bookId}"
# 获得该图书的详细信息
req=requests.get(url).text
# print(req)
# 使用json对爬取的动态信息进行格式转换
data=json.loads(req)
d=data["data"]
r=d["resume"]
# 获得内容简介
n_name=r["name"]
n_data=r["data"]
print(n_name)
print(n_data)
#获得图书简介
specialWord=d["specialWord"]
print(specialWord)
#获得作者
author=d["author"]
print(author)
#获得作者简介
a_name=d["authorIntro"]["name"]
a_data=d["authorIntro"]["data"]
print(a_name)
print(a_data)
#获得图书分类
bookTypeName=d["bookTypeName"]
print(bookTypeName)
# 爬取封面图片
photos=d["photos"]
# 用于存储当前图书的所有封面图片
ps=[]
for p in photos:
ps.append(p["picPath"])
print(ps)
#获得图书详情
db=d["bookDetail"]
db_name=db["name"]
print(db_name)
#书籍总页数
db_pages=db["data"]["pages"]
print(db_pages)
# 获得书籍编号
db_isbn=db["data"]["isbn"]
print(db_isbn)
# 书籍格式
db_format=db["data"]["format"]
print(db_format)
# 出版日期
db_publishDate=db["data"]["publishDate"]
print(db_publishDate)
# 版本
db_edition=db["data"]["edition"]
print(db_edition)
# 编辑者
db_executiveEditor=db["data"]["executiveEditor"]
print(db_executiveEditor)
# 书籍样式
db_frame=db["data"]["frame"]
print(db_frame)
# 书籍id
bi=d["bookId"]
print(bi)
# 获得图书目录
bookDirectory=d["bookDirectory"]
bookDirectory_data=bookDirectory["data"]
print(bookDirectory_data)
#指定图书id,获得该图书页面对应的推荐图书
def t2(bookids,rows=9):
url=f"https://www.ptpress.com.cn/bookinfo/getBookListForRecommend?bookIds={bookids}&rows={rows}"
text=requests.get(url).text
data=json.loads(text)
# 连接数据库
con=pymysql.connect(host="127.0.0.1",port=3306,
user="root",password="admin",
db="books",charset="utf8")
#获得游标
cursor=con.cursor()
for d in data["data"]:
# 图书图片地址
picPath=d["picPath"]
if "specialWord" in d:
# 图书宣传广告
specialWord=d["specialWord"]
else:
specialWord=""
# 图书价格
price=d["price"]
# 折扣后价格
discountPrice=d["discountPrice"]
# 折扣率
bookDiscount=d["bookDiscount"]
# 书名
bookName=d["bookName"]
# 图书id
bookId=d["bookId"]
#判断当前推荐图书是否已经存储在数据库中,如果不存在,则添加,否则就不添加
sql="select * from tb_tj_book where bookId=%s"
cursor.execute(sql,(bookId))
for b in cursor.fetchall():
if bookId not in b:
#将每一本推荐图书信息添加至推荐图书信息表
sql=""" insert into tb_tj_book values(%s,%s,%s,%s,%s,%s,%s,%s) """
cursor.execute(sql,(bookId,bookName,bookDiscount,discountPrice,price,specialWord,picPath,bookids))
#事务提交
con.commit()
# 查询数据库中所有的图书id
def selectBook():
# 连接数据库
con = pymysql.connect(host="127.0.0.1", port=3306,
user="root", password="admin",
db="books", charset="utf8")
# 获得游标
cursor = con.cursor()
sql="select bookid from tb_book"
cursor.execute(sql)
tu=cursor.fetchall()
# 循环遍历元组,拿出每一个图书id去爬取该图书的9本推荐图书
for i in tu:
t2(i[0])
if __name__ == "__main__":
#t2("5e6fe0f3-6ee7-40c2-8c25-9cdf9b0c87e6")
selectBook()