文章目录

  • 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。发现:

结果我们发现它不允许我们爬取。不过我们如果行为就像人类的行为,没有过度消耗服务器的资源仅仅是用于学习和探索那是没有问题的。

程序的设计

步骤

  1. 提交上屏搜索请求,循环获取页面
  2. 对于每个页面,提取商品名称和价格信息
  3. 将信息输出到屏幕上

方法

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爬虫(九)——京东比价定向爬虫相关推荐

  1. 246day(京东耳机定向爬虫练习)

    <2018年6月13日>[连续246天] 标题:京东耳机定向爬虫练习: 内容: 1.今天练习爬取京东的商品页面,以耳机为例: 第一页url: https://search.jd.com/S ...

  2. 【Python爬虫】股票数据定向爬虫

    爬取网站: http://quote.eastmoney.com/center/gridlist.html https://stockapp.finance.qq.com/mstats/ import ...

  3. 爬虫之京东5g手机爬虫+谷歌浏览器打开窗口使用

    爬取详细书籍数据信息 #coding:utf-8 501开始到1010 c=23 1001到1520 c=43 1501到2020 c=63 import requests ,re,json,pand ...

  4. 爬虫03_股票数据定向爬虫

    1.准备工作 功能描述: 目标:获取上交所和深交所所有股票的名称和交易信息 输出:保存到文件中 所用技术:requests.bs4.re.csv 数据网站选择: 新浪股票:http://finance ...

  5. Python 网络爬虫笔记8 -- 股票数据定向爬虫

    Python 网络爬虫笔记8 – 股票数据定向爬虫 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyth ...

  6. python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程

    前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...

  7. [置顶]定向爬虫 - Python模拟新浪微博登录

    当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息. 模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容. 实现微博登录的方法有很多,一般我们在模 ...

  8. python爬虫怎么下载图片到手机_python爬虫获取京东手机图片的图文教程

    如题,首先当然是要打开京东的手机页面 因为要获取不同页面的所有手机图片,所以我们要跳转到不同页面观察页面地址的规律,这里观察第二页页面 由观察可以得到,第二页的链接地址很有可能是 https://li ...

  9. Python爬虫学习笔记(实例:淘宝商品信息定向爬虫)

    淘宝商品信息定向爬虫先贴代码,后看解析: #淘宝商品信息定向爬虫 import requests import re#获得页面 def getHTMLText(url):try:#headers = ...

最新文章

  1. 快速幂 + 矩阵快速幂
  2. Android上下左右滑动,显示底层布局
  3. Python 中的基础语句
  4. 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
  5. LeetCode 第 23 场双周赛(970/2044,前47.5%)
  6. Git error. Command: `git ls-files --cached --exclude-standard --recurse-submodules`
  7. Retrofit+Rxjava+OkHttp
  8. 集成测试用例_如何评估测试用例的有效性?
  9. 解锁秋天\秋季借势的海波设计密码!
  10. Java序列化后isXXX变量没有了
  11. 小白入门angular-cli的第一次旅程(学习目标 学习目标 1. 路由基础知识)补充学习...
  12. 我的Android进阶之旅------Android检测wifi连接状态
  13. FISCO BCOS(十)——— FISCO BCOS的离线安装
  14. SILKY MIRACLE宣布奚梦瑶为品牌代言人
  15. Faster RCNN原理篇(二)——RoIPooling和RoIAlign的学习和理解
  16. 因涉政内容导致域名被封禁
  17. excel - 冻结窗格
  18. 前端常见图片格式整理
  19. 测绘工程本科生如何入门GNSS算法 - 引言
  20. 计算机网络与协议实验VLAN配置,计算机网络实验三虚拟局域网vlan划分与配置

热门文章

  1. 计算机培训费用濮阳,濮阳云计算培训,濮阳计算机培训费用,濮阳计算机培训完工作好不好找 - IT教育频道...
  2. word中英文下面有红色的波浪怎样去除
  3. RPA破解人力资源管理困境丨人资领域应用RPA的6大场景
  4. 如何利用快解析远程访问家庭智能网关
  5. 全网天花板,软件测试项目实战,银行项目支付业务测试看这一篇就够了
  6. Lesson 13 The greenwood Boys 绿林少年
  7. 从m个中选n数php语言,18-从n个数中选m个
  8. Macbook下安装Mysql
  9. 游戏:致那个曾经热血的青春
  10. 意味着你面试有戏的6大信号|智测优聘总结