Python小作业

题目:

从京东爬取2019年 “计算与互联网”的图书销量榜,包括图书的"书名", “作者”, “出版社”, “定价”, “京东价”, “好评率”,存入csv文件中。
爬取结果:
链接:https://pan.baidu.com/s/19PcHiFzIk0efVBXTgNoupw
提取码:vmua

注:网页结构及数据接口地址有可能发生变化,因此不能保证其时效性。

分析

爬取网页https://book.jd.com/booktop/0-0-0.html?category=3287-0-0-0-5-1

需要安装的库:
import requests
from bs4 import BeautifulSoup
import random
import re
import json
from selenium import webdriver
import time
import csv

运行selenium还需下载相应浏览器的驱动,并且拷贝到python的安装目录。

首先分析url中最后以为数字代表页数,由此可以通过拼接url的方式得到2019年的共5页的url。

url = "https://book.jd.com/booktop/0-0-0.html?category=3287-0-0-0-10005-"
count = 0
for i in range(1, 6):r = requests.get(url + str(i), headers=headers)r.encoding = "GBK"soup = BeautifulSoup(r.text, "html.parser")li = soup.find('ul', class_="clearfix").find_all('li')

使用bs4库对返回的页面进行解析,获取“作者”和“出版社”并保存在变量中。

for e in li:count += 1detail = e.find('div', class_="p-detail")href = "https:" + detail.find('a')['href']  # 二级链接dl = detail.find_all('dl')author = dl[0].find('dd').text.replace(' ', '').replace("\n", ' ').replace("著", "著 ")  # 作者press = dl[1].find('a').string  # 出版社

因书名在当前页面显示不完整,所以在商品详情页面获取。

new_soup = BeautifulSoup(requests.get(href, headers=headers).text, "html.parser")
name = new_soup.select_one('.sku-name').text.replace("\n", '').replace(" ", '')  # 书名

商品价格通过Beautiful解析不到,由此分析可能是通过ajax异步请求来获取数据。分析网页请求,得到JD商品价格的api接口地址https://p.3.cn/prices/mgets?skuIds=J_skuId,首先获取商品的sjuId,再将其替换就可获取商品的价格信息。

接口返回的数据为json格式(下图是chrome安装了json插件的效果)。

ajax_url = "https://p.3.cn/prices/mgets?skuIds=J_"  # 京东商品价格api
skuId = re.search(r'\d+', href).group()  # 正则表达式获取商品的skuId
json_p = requests.get(ajax_url + skuId).text  # 获取接口内容
data = json.loads(json_p.replace('[', '').replace(']', ''))  # 转为json格式
price = data['m']  # 定价
jd_price = data['op']  # 京东价

商品的好评度需要将滑到底部才会加载出来,因此可以使用selenium模拟浏览器行为。

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')  # 无窗口运行
driver = webdriver.Chrome(options=chrome_options)
driver.get(href)
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')  # 模拟浏览器滑到最下面
time.sleep(1)  # 短暂延时
html = BeautifulSoup(driver.page_source, "html.parser")
percent = html.find('div', class_="percent-con").text  # 好评率
driver.quit()  # 使用完关闭浏览器

将所有结果保存,由于爬取时间稍长,所以爬取时打印进度。

result.append([name, author, press, price, jd_price, percent])
print("{0:.2%}".format(count / 100))

最后将所有结果存进csv文件中。

if __name__ == '__main__':table_head = ["书名", "作者", "出版社", "定价", "京东价", "好评率"]writer = csv.writer(open("jdbook.csv", 'w'))  # 创建文件writer.writerow(table_head)  # 写入表头writer.writerows(result)  # 写入数据

源代码及运行结果:

import requests
from bs4 import BeautifulSoup
import random
import re
import json
from selenium import webdriver
import time
import csvresult = []  # 保存最终结果
my_headers = ["Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11','Opera/9.25 (Windows NT 5.1; U; en)','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)','Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)','Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12','Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',"Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7","Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 "
]
headers = {'User-Agent': random.choice(my_headers)}
url = "https://book.jd.com/booktop/0-0-0.html?category=3287-0-0-0-10005-"
count = 0
for i in range(1, 6):r = requests.get(url + str(i), headers=headers)r.encoding = "GBK"soup = BeautifulSoup(r.text, "html.parser")li = soup.find('ul', class_="clearfix").find_all('li')for e in li:count += 1detail = e.find('div', class_="p-detail")href = "https:" + detail.find('a')['href']  # 二级链接dl = detail.find_all('dl')author = dl[0].find('dd').text.replace(' ', '').replace("\n", ' ').replace("著", "著 ")  # 作者press = dl[1].find('a').string  # 出版社new_soup = BeautifulSoup(requests.get(href, headers=headers).text, "html.parser")name = new_soup.select_one('.sku-name').text.replace("\n", '').replace(" ", '')  # 书名ajax_url = "https://p.3.cn/prices/mgets?skuIds=J_"  # 京东商品价格apiskuId = re.search(r'\d+', href).group()  # 正则表达式获取商品的skuIdjson_p = requests.get(ajax_url + skuId).text  # 获取接口内容data = json.loads(json_p.replace('[', '').replace(']', ''))  # 转为json格式price = data['m']  # 定价jd_price = data['op']  # 京东价chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')  # 无窗口运行driver = webdriver.Chrome(options=chrome_options)driver.get(href)driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')  # 模拟浏览器滑到最下面time.sleep(1)  # 短暂延时html = BeautifulSoup(driver.page_source, "html.parser")percent = html.find('div', class_="percent-con").text  # 好评率driver.quit()  # 使用完关闭浏览器result.append([name, author, press, price, jd_price, percent])print("{0:.2%}".format(count / 100))if __name__ == '__main__':table_head = ["书名", "作者", "出版社", "定价", "京东价", "好评率"]writer = csv.writer(open("jdbook.csv", 'w', newline=''))  # 创建文件writer.writerow(table_head)  # 写入表头writer.writerows(result)  # 写入数据

csv文件:

Python爬取京东图书销量榜相关推荐

  1. 爬取京东笔记本电脑销量榜每件商品详情页url,并存入云服务器中的mysql库

    文章目录 一.目的分析 二.爬取页面商品所有详情页链接 1.爬取href链接 2.将数据存入数据库 完整代码: 三.多线程优化版已完成 (多线程优化)爬取京东笔记本电脑销量榜data-sku(商品id ...

  2. (多线程优化)爬取京东笔记本电脑销量榜data-sku(商品id),并存入云服务器中的mysql库(爬取时间较上一版提升十多倍)

    文章目录 前言 一.优化内容 1.cromeOptions()加载优化 2.ThreadPool()中的pool.map()多线程优化 二.完整代码 三.运行效果截图 前言 本文为上一篇爬虫文章的多线 ...

  3. python爬取京东图书_Python抓取京东图书评论数据

    Python抓取京东图书评论数据 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python抓取京东图书评论数据.txt ] (友情提示:右键点上行txt文档名- ...

  4. python函数大全书籍京东_用python爬取京东图书排行榜并进行数据整合

    经常在京东买书,突发奇想,向看看京东畅销图书有哪些,于是,就有有了下面的代码. python版本:3.5 编辑器:jupyter 首页链接:http://book.jd.com/booktop/0-0 ...

  5. python工具箱查询手册书籍京东_用python爬取京东图书排行榜并进行数据整合

    经常在京东买书,突发奇想,向看看京东畅销图书有哪些,于是,就有有了下面的代码. python版本:3.5 编辑器:jupyter 首页链接:http://book.jd.com/booktop/0-0 ...

  6. [爬虫-python]爬取京东100页的图书(机器学习)的信息(价格,打折后价格,书名,作者,好评数,差评数,总评数)

    Python爬取京东的机器学习类图书的信息 一,配置搜索关键字和页数, 二,查找用到的三个URL的过程 1. 搜索图书的URL 2. 评论总数,差评数,好评数的URL 3. 当前价格与打折前价格URL ...

  7. python爬取京东书籍_一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  8. python学爬虫书籍_Python3实战爬虫之爬取京东图书的图文详解

    最近在学习python3,下面这篇文章主要给大家介绍了关于Python3实战爬虫之爬取京东图书图片的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下 ...

  9. 一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  10. 如何使用python编程抢京东优惠券 知乎_学好Python爬取京东知乎价值数据

    原标题:学好Python爬取京东知乎价值数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这 ...

最新文章

  1. SAP MM 初阶之不常用事务代码MEBV
  2. 耗时118天爆肝【1296页】的“Android高级开发面试题”,终于成功上岸字节
  3. webservice用cxf发布SOAP
  4. python matplotlib_Python の Matplotlib
  5. PyQt 5.4参考指南 ---- PyQt5和PyQt4之间的差异
  6. 使用Jupyter Notebook+bokeh绘图入门完整步骤
  7. liunx 加入域控_[整理篇]linux加入windows域之完美方案
  8. 普通html优化处理,iOS 数据优化之处理HTML字符串
  9. IOS学习笔记6—Objective C—Foundation框架
  10. Miller Robbin测试模板(无讲解)
  11. 深度学习基础之sofxmax回归
  12. 计算机里面的wps如何删除,如何快速删除电脑上的wps的所有换行符
  13. 丰密面单打印 隐私面单 C#开发
  14. ActiveX开发详解
  15. 三大微分中值定理和洛必达法则、泰勒公式
  16. 微信小程序夜间模式,实现更换皮肤,切换白天黑夜模式,简单易懂
  17. 腾讯云8核 16G 18M配置服务器评测
  18. 基于多项式螺旋曲线的轨迹优化
  19. 一个序列的子序列个数
  20. SpringMVC(8)——格式化转换器Formatter

热门文章

  1. 当你在追梦的路上抱怨生活太累快要放弃的时候,不妨看看我的这篇文章
  2. Mac 科研常用软件
  3. 泪目!java面试八股文是哪些
  4. 软件工程中的数据流图
  5. poj2112,最大流,最优挤奶方案
  6. 根据录入的计算公式计算_增值税含税怎么计算?
  7. 三维激光雷达路沿检测
  8. python输出闰年_python写闰年
  9. uni-app 极光推送
  10. 将汉语转换成拼音,实现拼音和中文双重登录