十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
嗨喽,大家好呀~这里是爱看美女的茜茜呐
永新ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
本次采集网介绍:图书频道-全球最大中文网上书店
专业提供小说传记,青春文学,成功励志,投资理财等各品类图书
畅销榜最新报价、促销、评论信息,引领最新网上购书体验!
Python 3.8
Pycharm
requests >>> pip install requests
parsel >>> pip install parsel
csv
请求这个网站 就可以得到我们想要数据内容
发送请求, 模拟浏览器对于url发送请求
获取数据, 获取服务器返回响应数据 ---> 开发者工具里面response
解析数据, 提取我们想要数据内容, 书籍基本信息
保存数据, 保存表格里面
# 导入数据请求模块 ---> 第三方模块 需要 在cmd 里面 pip install requests import requests # 导入数据解析模块---> 第三方模块 需要 在cmd 里面 pip install parsel import parsel # 导入csv模块---> 内置模块 不需要安装 import csv # 创建文件 f= open('书籍data25页.csv', mode='a', encoding='utf-8', newline='') # f文件对象 fieldnames 字段名---> 表格第一行 作为表头 csv_writer= csv.DictWriter(f, fieldnames=[ '标题', '评论', '推荐', '作者', '日期', '出版社', '售价', '原价', '折扣', '电子书', '详情页', ]) # 源码、解答、教程加Q裙: # 写入表头 csv_writer.writeheader() """ 1. 发送请求, 模拟浏览器对于url发送请求 - 等号左边是定义变量名 - 模拟浏览器 ---> 请求头 headers---> 在开发者工具里面复制粘贴 字典数据类型 一种简单反反爬手段, 防止被服务器识别出来是爬虫程序 - 使用什么请求方式, 根据开发者工具来的 """ for page in range(1, 26): # 1,26 是取1-25的数字, 不包含26 # 确定请求网址 url= f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-{page}' # 模拟浏览器---> 请求头 headers= { # User-Agent 用户代理 表示浏览器基本身份标识 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } # 发送请求 返回的响应对象--->200]>: <> 表示对象 response 响应回复 200状态码 表示请求成功 response= requests.get(url=url, headers=headers) print(response) #2. 获取数据, 获取服务器返回响应数据 ---> 开发者工具里面 response print(response.text) """ 3. 解析数据, 提取我们想要数据内容, 书籍基本信息 根据得到数据类型以及我们想要数据内容, 选择最适合解析方法: - re正则表达式 - css选择器 - xpath xpath---> 根据标签节点提取数据 css选择器---> 根据标签属性提取数据内容 css语法匹配 不会1 会的 2 复制粘贴会不会---> ctrl + C ctrl + v """ # 转数据类型 ''> selector= parsel.Selector(response.text) # 第一次提取 提取所有li标签--> 返回列表, 元素Selector对象 lis= selector.css('.bang_list_mode li') # for循环遍历 之后进行二次提取 我们想要内容 for li in lis: """ attr() 属性选择器 a::attr(title)---> 获取a标签里面title属性 get() 获取一个 第一个 """ title = li.css('.name a::attr(title)').get() # 标题 star= li.css('.star a::text').get().replace('条评论', '') # 评论 recommend= li.css('.tuijian::text').get().replace('推荐', '') # 推荐 author= li.css('.publisher_info a::attr(title)').get() # 作者 date= li.css('.publisher_info span::text').get() # 日期 press= li.css('div:nth-child(6) a::text').get() # 出版社 price_n= li.css('.price .price_n::text').get() # 售价 price_r= li.css('.price .price_r::text').get() # 原价 price_s= li.css('.price .price_s::text').get().replace('折', '') # 折扣 price_e= li.css('.price .price_e .price_n::text').get() # 电子书 href= li.css('.name a::attr(href)').get() # 详情页 # 保存数据 源码、解答、教程加Q裙: dit= { '标题': title, '评论': star, '推荐': recommend, '作者': author, '日期': date, '出版社': press, '售价': price_n, '原价': price_r, '折扣': price_s, '电子书': price_e, '详情页': href, } # 写入数据 csv_writer.writerow(dit) print(title, star, recommend, author, date, press, price_n, price_r, price_s, price_e, href, sep=' |')