小白python爬虫入门实例2—— 翻页爬取京东商城商品数据
通过分析京东的网址,寻找翻页时网址的变化规律,从而获取需要用到的数据。在这里我将展示在京东商城爬取书包的价格以及其商品全称,如果觉得这篇文章ok的亲们,可以换个网站,用淘宝如法炮制,祝您成功!
一、源代码
import requests
from bs4 import BeautifulSoupdef getText(url):try:kv = {'user-agent': 'Mozilla/5.0'}r = requests.get(url, headers=kv,timeout = 30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""def parsePage(ilt , html):soup = BeautifulSoup(html,"html.parser")plt = soup.find_all('div',class_='p-price') #价钱所在的div的class标签为“p-price"tlt = soup.find_all('div',class_='p-name') #价钱所在的div的class标签为“p-name p-name-type-2"for i in range(len(plt)):price = plt[i]('i')title = tlt[i]('em')ilt.append([price[0].get_text(),title[0].get_text()])def printGoodsList(ilt):print("{:^4}\t{:^8}\t{:^16}".format("序号","价格","商品名称"))count = 0for g in ilt:count += 1print("{:^4}\t{:^8}\t{:^16}".format(count,g[0],g[1]))def main():goods = input("请输入商品名称:")depth = 2start_url = "https://search.jd.com/Search?keyword=" + goodsinfoList = []for i in range(depth):url = start_url + '&page=' + str(2 * i - 1)html = getText(url)parsePage(infoList, html)printGoodsList(infoList)
main()
测试代码
##测试
goods = input("请输入商品名称:")
kv = {'user-agent': 'Mozilla/5.0'}
dept = 2
url = "https://search.jd.com/Search?keyword=" + goodsinfo = []
for i in range(dept):url1 = url + '&page=' + str(2 * i - 1)r = requests.get(url1, headers=kv)print(r.status_code)r.encoding = r.apparent_encodinghtml = r.textsoup = BeautifulSoup(html, "html.parser")plt = soup.find_all('div', class_='p-price')nlt = soup.find_all('div', class_='p-name')for j in range(len(plt)):price = plt[j]('i')name = nlt[j]('em')info.append([price[0].get_text(),name[0].get_text()])print(info[j])
二、函数解析
1、getText(url):以目标网页作为参数,获取网页文本内容并返回。
url:为传入函数的目标网址;
“try... except...":为了防止长时间无法响应网站而死机,设置响应时间为30秒;
def getText(url):try:kv = {'user-agent': 'Mozilla/5.0'}r = requests.get(url, headers=kv,timeout = 30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""
2、parsePage(ilt , html):分析目标网页中需要的内容(商品全称,商品价格),存储在列表ilt中。
ilt:传入的空白列表参数,用于保存查询到的商品信息(商品全称,商品价格);
html:该参数中保存了目标网站的网页内容;
soup:调用引入的BeautifulSoup库(使用方法请自行搜索,这里不做解释);
plt:用于保存价格数据的列表。用BeautifulSoup库中的find_all()函数寻找需要的价格数据;
tlt:用于保存商品名称数据的列表。用BeautifulSoup库中的find_all()函数寻找需要的商品名称数据;
price:用于保存查找到的信息中,文本内容的价格字符;
title:用于保存查找到的信息中,文本内容的商品全称的字符;
def parsePage(ilt , html):soup = BeautifulSoup(html,"html.parser")plt = soup.find_all('div',class_='p-price') #价钱所在的div的class标签为“p-price"tlt = soup.find_all('div',class_='p-name') #价钱所在的div的class标签为“p-name p-name-type-2",这里可以填p-name或者p-name-type-2for i in range(len(plt)):price = plt[i]('i')title = tlt[i]('em')ilt.append([price[0].get_text(),title[0].get_text()])
3、printGoodsList(ilt):打印出列表ilt中存储的相关数据信息。
ilt:已经存储了所需要的信息的列表;
count:作为序号用于记录商品的数量,并同商品信息一并输出;
循环输出商品信息。
def printGoodsList(ilt):print("{:^4}\t{:^8}\t{:^16}".format("序号","价格","商品名称"))count = 0for g in ilt:count += 1print("{:^4}\t{:^8}\t{:^16}".format(count,g[0],g[1]))
三、网页及网址分析
以“书包”为例,进入京东官网"https://www.jd.com/",在搜索框中输入“书包”后,可以明显看到,网页变成了https://search.jd.com/Search?keyword=书包&enc=utf-8&wq=书包&pvid=015eefefd82d46e8829af2ceb43db206
分析网页网址可知,通过keyword后面的字段可以搜索到想要的商品,因此,可以通过用户输入获取商品初始网址。点击商品主页底部的翻页可以发现,网址再次发生了变化。
点击底部导航栏,选择第二页画面后观察网址,发现网址变化为:https://search.jd.com/Search?keyword=书包&qrst=1&wq=书包&stock=1&pvid=015eefefd82d46e8829af2ceb43db206&page=3&s=56&click=0
变化后的网址与首页网址的区别在于多了一个stock、page、s以及click参数,我们继续点击第三页内容进行对比观察
https://search.jd.com/Search?keyword=书包&qrst=1&wq=书包&stock=1&pvid=015eefefd82d46e8829af2ceb43db206&page=5&s=116&click=0
第二页与第三页的网址对比可以发现,stock没有变化,page从3变成了5,s从56变成了116,click没有变化。至此,可以推断出这几个变量的变化规律:
page=2*i-1(i的值表示第i页的商品内容);
s的值,好吧没找出规律来QAQ,欢迎大家在评论里批评指正;
因此,我们以获取两页的商品为例,将目标网页根据寻找到的规律重新订制。
同样,我们在寻找目标数据时,先随便找到一个商品,右键点击“检查”,发现我们所需要的价格信息在class名为“p-price”的div中,商品全称在class名为“p-name”(或“p-name-type-2”,不熟悉html中命名规则的亲们可以自行查找相关资料学习,这里不做解释)的div中,而价格的文本内容在div下的i标签中,因此通过BeautifulSoup中的find_all()函数找到div,再将价格保存在price中;同上,商品全称的文本内容保存在em标签中,使用get_text()函数可以获取其中的非标签内容。
main():执行函数;
goods:通过用户输入获取商品名称;
depth:爬取目标网页的页数,这里以2页的内容为例,亲们可自行修改;
start_url:定义初始网址,将获取的商品数据加入网址中;
infoList:用于存放相关数据的列表;
url:翻页后的网址。
def main():goods = input("请输入商品名称:")depth = 2start_url = "https://search.jd.com/Search?keyword=" + goodsinfoList = []for i in range(depth):url = start_url + '&page=' + str(2 * i - 1)html = getText(url)parsePage(infoList, html)printGoodsList(infoList)
四、声明
本人是学习python爬虫路上的一名小白,如有不当之处(轻喷,小白需要鼓励),欢迎大佬们批评指正。
小白python爬虫入门实例2—— 翻页爬取京东商城商品数据相关推荐
- python爬虫数据分析项目 双十一_Python爬取淘宝商品数据,价值千元的爬虫外包项目!...
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 完整代码可以点击下方链 ...
- python爬虫入门实战---------一周天气预报爬取_Python爬虫入门实战--------一周天气预报爬取【转载】【没有分析...
Python爬虫入门实战--------一周天气预报爬取[转载][没有分析 Python爬虫入门实战--------一周天气预报爬取[转载][没有分析] 来源:https://blog.csdn.ne ...
- python翻页爬取京东商品评价
python翻页爬取京东商品评价 以小米手机评论为案例 1.找到目标的url 2.检查响应结果 3.解析json数据,发现相应数据无法成功解析 注意:json数据一般都是以大括号或中括号开头或者结尾的 ...
- Python爬虫教程:Python爬取京东商城商品大图详解
Python爬取京东商城商品大图详解 做为一个爬虫初学者,在做爬取网址图片的练习中以京东网为例爬取商品大图并保存在相应的文件夹 1.导入模块 import urllib.request import ...
- Python爬取京东任意商品数据实战总结
利用Python爬取京东任意商品数据 今天给大家展示爬取京东商品数据 首先呢还是要分思路的,我分为以下几个步骤: 第一步:得到搜索指定商的url 第二步:获得搜索商品列表信息 第三步:对得到的商品数据 ...
- Python爬虫入门案例教学:批量爬取彼岸桌面4K超清美女壁纸
先图片开路 环境介绍 python 3.6 / 3.8 pycharm 编辑器 requests parsel os 文件操作 在cmd里面就可以进行安装 pip install requests 无 ...
- 利用python爬虫爬取京东商城商品图片
笔者曾经用python第三方库requests来爬取京东商城的商品页内容,经过解析之后发现只爬到了商品页一半的图片.(这篇文章我们以爬取智能手机图片为例) 当鼠标没有向下滑时,此时查看源代码的话,就会 ...
- 小白Python爬虫入门实例1——爬取中国最好大学排名
中国大学慕课python网络爬虫与信息提取--定向爬虫"中国最好大学排名信息爬取" 由于课程中老师给的案例有些许瑕疵,加之至今该网页的首页已经更新,原网址已不存在,因此笔者在老师给 ...
- Python爬虫入门教程02:小说爬取
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 前文 01.python爬虫入门教程01:豆瓣Top电影爬取 基本开发环境 Python 3 ...
- Python爬虫:Selenium模拟Chrome浏览器爬取淘宝商品信息
对于采用异步加载技术的网页,有时候想通过逆向工程的方式来设计爬虫进行爬取会比较困难,因此,要想通过python获取异步加载数据往往可以使用Selenium模拟浏览器的方式来获取. Selenium是一 ...
最新文章
- MVC中,视图的Layout使用
- Ext.form 表单为什么第二次就不正常显示
- 转载 cFos vs cFosSpeed
- python递归实现_Python-递归实现
- 动力环境监控系统论文_动力环境监控系统现状及在电源维护中的作用
- 英国-新加坡联合博士奖学金(人工智能、数字医疗方向)
- 外媒确认iPhone 13 Pro系列采用120Hz OLED面板:支持智能调节屏幕刷新率
- [论文阅读] Unifying Global-Local Representations in Salient Object Detection with Transformer
- 关于在dll中申请内存,外部释放的问题
- git android pdk,Android源码下载,Syncing work tree: error
- 达梦dsc搭建+dw
- 使用Python快速生成二维码的两种方式及二维码解码
- FX1S控制步进电机的实例(图与程序)
- python 多进程编程 之 加速kmeans算法
- 如何让U盘同时兼容Windows和Mac OS X系统
- 微信小程序调出多窗口
- 本地BLAST的使用
- Python遍历字典中的键值对
- Servlet六(监听器)
- arp命令linux上,arp命令 - Linux命令大全 | linux教程
热门文章
- HTTP协议概述 基本概念说明
- ps一点等于多少厘米_请问PS中“像素”和“厘米”是怎么换算的?
- [转载]this 指向详细解析(箭头函数)
- 迪文屏学习系列之数据录入
- Google Earth Engine(GEE)——逐日MOD10A1.005积雪覆盖度500m数据下载和均值标准差统计(中国区域为例)
- 开发一款Android App,从零开始详细讲解
- 个人所得税计算器(简易)
- 人在囧途——Java程序猿学习Python
- 一秒等于多少毫秒_新知|一秒有多长?你以为的“一瞬间”有多快?
- 纯代码方式实现cesium倾斜摄影单体化和楼栋分层