Python爬虫(九)——京东比价定向爬虫
文章目录
- Python爬虫(九)——京东比价定向爬虫
- 判断可行性
- 查看链接
- 查看robots协议
- 程序的设计
- 步骤
- 方法
- def getHTMLText(url)
- parsePage(ilt, html)
- printGoodLists(ilt)
- 完整代码
Python爬虫(九)——京东比价定向爬虫
- 目标:获取京东搜索页面的信息,提取其中的商品名称和价格。
- 要求:京东的搜索接口 翻页的处理
- 技术路线:requests-re
判断可行性
查看链接
第一页:
https://search.jd.com/Search?keyword=相机&enc=utf-8&page=1
第二页:
https://search.jd.com/Search?keyword=相机&enc=utf-8&page=3
第三页:
https://search.jd.com/Search?keyword=相机&enc=utf-8&page=5
由上我们可以猜测最后的s变量和页码有关。
查看robots协议
打开京东的robots.txt。发现:
结果我们发现它不允许我们爬取。不过我们如果行为就像人类的行为,没有过度消耗服务器的资源仅仅是用于学习和探索那是没有问题的。
程序的设计
步骤
- 提交上屏搜索请求,循环获取页面
- 对于每个页面,提取商品名称和价格信息
- 将信息输出到屏幕上
方法
def getHTMLText(url)
def getHTMLText(url):try: # 利用前面的代码框架返回页面的textr=requests.get(url,timeout=30)r.raise_for_status()r.encoding=r.apparent_encodingreturn r.textexcept:return ''
这时我们发现无法得到结果,查看后发现界面跳转到了登录界面,于是我们加入cookies参数来解决这个问题。
那么如何得到cookie呢?我们打开这个网页,按下f12打开开发者模式:
然后选中network刷新一下界面,在最上面找到Search?keyword=这个包:
然后我们在右边的Request Hearders中就能找到自己的cookie:
代码:
def getHTMLText(url):try: # 利用前面的代码框架返回页面的textr = requests.get(url, timeout=30, headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}, cookies={'cookie': '你的cookie'})r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ''
parsePage(ilt, html)
我们首先打开网页的源代码找到商品的信息。
我们发现淘宝商品的名字在标签em中且都有相机,而价格在标签i中且都是由数字.数字组成,于是利用以下两个正则表达式表示:
#价格
r'\<i\>[\d]*\.[\d]*\<\/i\>'
#商品名称
r'\<em\>.*相机.*\<\/em\>'
那么方法的代码为:
def parsePage(ilt, html):try:# 商品价格由数字和小数点组成所以用[\d.]*\.[\d]*来表示plt = re.findall(r'\<i\>[\d]*\.[\d]*\<\/i\>', html)tlt = re.findall(r'\<em\>.*相机.*\<\/em\>', html)for i in range(len(plt)):price = plt[i][3:-4] # 直接利用python字符串特性得到价格if re.findall(r'.*京品数码.*', tlt[i]) or re.findall(r'.*京东国际.*', tlt[i]) or re.findall(r'.*京东超市.*', tlt[i]):print('here')# 通过最小匹配来得到第一个<之前的内容title = re.findall(r'span\>.*?\<', tlt[i])[0][5:-1]+'相机'else:# 同样的方法获得其他类型商品名称title = re.findall(r'em\>.*?\<', tlt[i])[0][3:-1]+'相机'ilt.append([price, title])except:print("")
printGoodLists(ilt)
最后将结果打印出来,这里我也遇到了一些问题:无法打印出界面中所有的商品,我用BeautifulSoup+re分析也是同样的结果,如果你知道问题的所在希望能够给我留言或者私信我。
def printGoodLists(ilt):tplt = "{:4}\t{:8}\t{:16}" # 给出打印模板,第一个长度为4,第二个长度为8,最后一个长度为16print(tplt.format("序号", "价格", "商品名称"))count = 0for goods in ilt:count += 1print(tplt.format(count, goods[0], goods[1]))print("")
完整代码
#encoding='utf-8import requests
import redef getHTMLText(url):try: # 利用前面的代码框架返回页面的textr = requests.get(url, timeout=30, headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}, cookies={'cookie': '你的cookie'})r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ''def parsePage(ilt, html):try:# 商品价格由数字和小数点组成所以用[\d.]*\.[\d]*来表示plt = re.findall(r'\<i\>[\d]*\.[\d]*\<\/i\>', html)tlt = re.findall(r'\<em\>.*相机.*\<\/em\>', html)for i in range(len(plt)):price = plt[i][3:-4] # 直接利用python字符串特性得到价格if re.findall(r'.*京品数码.*', tlt[i]) or re.findall(r'.*京东国际.*', tlt[i]) or re.findall(r'.*京东超市.*', tlt[i]):# 通过最小匹配来得到第一个<之前的内容title = re.findall(r'span\>.*?\<', tlt[i])[0][5:-1]+'相机'else:# 同样的方法获得其他类型商品名称title = re.findall(r'em\>.*?\<', tlt[i])[0][3:-1]+'相机'ilt.append([price, title])except:print("")def printGoodLists(ilt):tplt = "{:4}\t{:8}\t{:16}" # 给出打印模板,第一个长度为4,第二个长度为8,最后一个长度为16print(tplt.format("序号", "价格", "商品名称"))count = 0for goods in ilt:count += 1print(tplt.format(count, goods[0], goods[1]))print("")goods = '相机'
depth = 3
startUrl = 'https://search.jd.com/Search?keyword='+goods+'&enc=utf-8'
infoList = []
for i in range(depth): # 这里通过循环来查询多个页面并保存再infoList中try:page = i*2+1url = startUrl+'&page='+str(page) # 利用之前观察的页面url来设定每个页面的urlhtml = getHTMLText(url)parsePage(infoList, html)except:continue
printGoodLists(infoList)
运行结果:
Python爬虫(九)——京东比价定向爬虫相关推荐
- 246day(京东耳机定向爬虫练习)
<2018年6月13日>[连续246天] 标题:京东耳机定向爬虫练习: 内容: 1.今天练习爬取京东的商品页面,以耳机为例: 第一页url: https://search.jd.com/S ...
- 【Python爬虫】股票数据定向爬虫
爬取网站: http://quote.eastmoney.com/center/gridlist.html https://stockapp.finance.qq.com/mstats/ import ...
- 爬虫之京东5g手机爬虫+谷歌浏览器打开窗口使用
爬取详细书籍数据信息 #coding:utf-8 501开始到1010 c=23 1001到1520 c=43 1501到2020 c=63 import requests ,re,json,pand ...
- 爬虫03_股票数据定向爬虫
1.准备工作 功能描述: 目标:获取上交所和深交所所有股票的名称和交易信息 输出:保存到文件中 所用技术:requests.bs4.re.csv 数据网站选择: 新浪股票:http://finance ...
- Python 网络爬虫笔记8 -- 股票数据定向爬虫
Python 网络爬虫笔记8 – 股票数据定向爬虫 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyth ...
- python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程
前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...
- [置顶]定向爬虫 - Python模拟新浪微博登录
当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息. 模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容. 实现微博登录的方法有很多,一般我们在模 ...
- python爬虫怎么下载图片到手机_python爬虫获取京东手机图片的图文教程
如题,首先当然是要打开京东的手机页面 因为要获取不同页面的所有手机图片,所以我们要跳转到不同页面观察页面地址的规律,这里观察第二页页面 由观察可以得到,第二页的链接地址很有可能是 https://li ...
- Python爬虫学习笔记(实例:淘宝商品信息定向爬虫)
淘宝商品信息定向爬虫先贴代码,后看解析: #淘宝商品信息定向爬虫 import requests import re#获得页面 def getHTMLText(url):try:#headers = ...
最新文章
- 快速幂 + 矩阵快速幂
- Android上下左右滑动,显示底层布局
- Python 中的基础语句
- 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
- LeetCode 第 23 场双周赛(970/2044,前47.5%)
- Git error. Command: `git ls-files --cached --exclude-standard --recurse-submodules`
- Retrofit+Rxjava+OkHttp
- 集成测试用例_如何评估测试用例的有效性?
- 解锁秋天\秋季借势的海波设计密码!
- Java序列化后isXXX变量没有了
- 小白入门angular-cli的第一次旅程(学习目标 学习目标 1. 路由基础知识)补充学习...
- 我的Android进阶之旅------Android检测wifi连接状态
- FISCO BCOS(十)——— FISCO BCOS的离线安装
- SILKY MIRACLE宣布奚梦瑶为品牌代言人
- Faster RCNN原理篇(二)——RoIPooling和RoIAlign的学习和理解
- 因涉政内容导致域名被封禁
- excel - 冻结窗格
- 前端常见图片格式整理
- 测绘工程本科生如何入门GNSS算法 - 引言
- 计算机网络与协议实验VLAN配置,计算机网络实验三虚拟局域网vlan划分与配置
热门文章
- 计算机培训费用濮阳,濮阳云计算培训,濮阳计算机培训费用,濮阳计算机培训完工作好不好找 - IT教育频道...
- word中英文下面有红色的波浪怎样去除
- RPA破解人力资源管理困境丨人资领域应用RPA的6大场景
- 如何利用快解析远程访问家庭智能网关
- 全网天花板,软件测试项目实战,银行项目支付业务测试看这一篇就够了
- Lesson 13 The greenwood Boys 绿林少年
- 从m个中选n数php语言,18-从n个数中选m个
- Macbook下安装Mysql
- 游戏:致那个曾经热血的青春
- 意味着你面试有戏的6大信号|智测优聘总结