7.获取豆瓣读书top250
"""
获取豆瓣读书top250
1.发送请求,获取html页码数据
2.解析数据,把html转化为解析对象
3.定位数据,根据html页面标签提取数据
4.保存数据
"""
import requests
import csv
import parsel
# 创建文件对象
f = open("豆瓣读书top250.csv",mode="a",encoding="utf‑8‑sig",newline="")
csv_writer = csv.DictWriter(f,[
"书名",
"作者",
"出版社",
"出版年份",
"价格",
"评分",
"简介",
"详情页"
])
csv_writer.writeheader() # 写入表头
# 翻页获取1-10页数据
for page in range(10):
print(f"正在爬取第{page+1}页的数据.......")
start_num = page * 25
url = f'https://book.douban.com/top250?start={start_num}'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"
}
# url = "https://book.douban.com/top250"
response = requests.get(url=url,headers=headers,verify=False)
response.encoding = response.apparent_encoding
# print(response.text)
# html页面转化成可解析对象
selector = parsel.Selector(response.text)
# 获取所有书籍数据标签
tables = selector.css(".indent table")
for table in tables:
title = table.css(".pl2 a::text").get().strip() # 书名
href = table.css(".pl2 a::attr(href)").get() # 书名
book_info = table.css(".pl::text").get().split("/") # 书具体信息数据
author = book_info[0] # 作者
press = book_info[2] if len(book_info) > 4 else book_info[1] # 出版社
year = book_info[3] if len(book_info) > 4 else book_info[2] # 出版年份
price = book_info[-1] if len(book_info) > 3 else "" # 价格
score = table.css(".rating_nums::text").get() # 评分
intro = table.css(".quote span::text").get() # 简介
# print(title,author,press,year,price,score,intro)
dict_data = {
"书名": title,
"作者": author,
"出版社": press,
"出版年份": year,
"价格": price,
"评分": score,
"简介": intro,
"详情页": href
}
print(dict_data)
csv_writer.writerow(dict_data)
f.close()
"""
https://book.douban.com/top250?start=0 第1页
https://book.douban.com/top250?start=25 第2页
https://book.douban.com/top250?start=50 第3页
(清)曹雪芹 / 人民文学出版社 / 1982-3 / 59.70元
[英] J·K·罗琳 / 苏农 / 人民文学出版社 / 2008-12 / 498.00元
[英] 阿·柯南道尔 / 丁钟华 等 / 群众出版社 / 1981-8 / 53.00元/68.00元
[日] 伊藤诗织 / 匡匡 / 雅众文化/中信出版集团 / 2019-4 / 48.00元
4 个元素:[作者,出版社,年份,价格]
5 个元素:[作者,译者,出版社,年份,价格]
"""



浙公网安备 33010602011771号