python京东购买_python大规模爬取京东
python大规模爬取京东
主要工具
scrapy
BeautifulSoup
requests
分析步骤
打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点
我们可以看到这个页面并不是完全的,当我们往下拉的时候将会看到图片在不停的加载,这就是ajax,但是当我们下拉到底的时候就会看到整个页面加载了60条裤子的信息,我们打开chrome的调试工具,查找页面元素时可以看到每条裤子的信息都在
这个标签中,如下图:
生成图
接着我们打开网页源码就会发现其实网页源码只有前30条的数据,后面30条的数据找不到,因此这里就会想到ajax,一种异步加载的方式,于是我们就要开始抓包了,我们打开chrome按F12,点击上面的NetWork,然后点击XHR,这个比较容易好找,下面开始抓包,如下图:
抓包图
这里的showitems是裤子的id,page是翻页的,可以看出来我们只需要改动两处就可以打开不同的网页了,这里的page很好找,你会发现一个很好玩的事情,就是主网页的page是奇数,但是异步加载的网页中的page是偶数,因此这里只要填上偶数就可以了,但是填奇数也是可以访问的。这里的show_items就是id了,我们可以在页面的源码中找到,通过查找可以看到id在li标签的data-pid中,详情请看下图
id
上面我们知道怎样找参数了,现在就可以撸代码了
代码讲解
首先我们要获取网页的源码,这里我用的requests库,安装方法为pip install requests,代码如下:
def get_html(self):
res = requests.get(self.url, headers=self.headers)
html = res.text
return html #返回的源代码
根据上面的分析可以知道,第二步就是得到异步加载的url中的参数show_items,就是li标签中的data-pid,代码如下:
def get_pids(self):
html = self.get_html()
soup = BeautifulSoup(html, 'lxml') #创建BeautifulSoup对象
lis = soup.find_all("li", class_='gl-item') #查找li标签
for li in lis:
data_pid = li.get("data-pid") #得到li标签下的data-pid
if (data_pid):
self.pids.add(data_pid) #这里的self.pids是一个集合,用于过滤重复的
下面就是获取前30张图片的url了,也就是主网页上的图片,其中一个问题是img标签的属性并不是一样的,也就是源码中的img中不都是src属性,一开始已经加载出来的图片就是src属性,但是没有加载出来的图片是data-lazy-img,因此在解析页面的时候要加上讨论。代码如下:
def get_src_imgs_data(self):
html = self.get_html()
soup = BeautifulSoup(html, 'lxml')
divs = soup.find_all("div", class_='p-img') # 图片
# divs_prices = soup.find_all("div", class_='p-price') #价格
for div in divs:
img_1 = div.find("img").get('data-lazy-img') # 得到没有加载出来的url
img_2 = div.find("img").get("src") # 得到已经加载出来的url
if img_1:
print img_1
self.sql.save_img(img_1)
self.img_urls.add(img_1)
if img_2:
print img_2
self.sql.save_img(img_2)
self.img_urls.add(img_2)
前三十张图片找到了,现在开始找后三十张图片了,当然是要请求那个异步加载的url,前面已经把需要的参数给找到了,下面就好办了,直接贴代码:
def get_extend_imgs_data(self):
# self.search_urls=self.search_urls+','.join(self.pids)
self.search_urls = self.search_urls.format(str(self.search_page), ','.join(self.pids)) #拼凑url,将获得的单数拼成url,其中show_items中的id是用','隔开的,因此要对集合中的每一个id分割,page就是偶数,这里直接用主网页的page加一就可以了
print self.search_urls
html = requests.get(self.search_urls, headers=self.headers).text #请求
soup = BeautifulSoup(html, 'lxml')
div_search = soup.find_all("div", class_='p-img') #解析
for div in div_search:
img_3 = div.find("img").get('data-lazy-img') #这里可以看到分开查找img属性了
img_4 = div.find("img").get("src")
if img_3: #如果是data-lazy-img
print img_3
self.sql.save_img(img_3) #存储到数据库
self.img_urls.add(img_3) #用集合去重
if img_4: #如果是src属性
print img_4
self.sql.save_img(img_4)
self.img_urls.add(img_4)
通过上面就可以爬取了,但是还是要考虑速度的问题,这里我用了多线程,直接每一页面开启一个线程,速度还是可以的,感觉这个速度还是可以的,几分钟解决问题,总共爬取了100个网页,这里的存储方式是mysql数据库存储的,要用发哦MySQLdb这个库,详情自己百度,当然也可以用mogodb但是还没有学呢,想要的源码的朋友请看GitHub源码
拓展
写到这里可以看到搜索首页的网址中keyword和wq都是你输入的词,如果你想要爬取更多的信息,可以将这两个词改成你想要搜索的词即可,直接将汉字写上,在请求的时候会自动帮你编码的,我也试过了,可以抓取源码的,如果你想要不断的抓取,可以将要搜索的词写上文件里,然后从文件中读取就可以了。以上只是一个普通的爬虫,并没有用到什么框架,接下来将会写scrapy框架爬取的,请继续关注我的博客哦!!!
python京东购买_python大规模爬取京东相关推荐
- python爬京东延迟加载_python大规模爬取京东
python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...
- python爬取京东评论_Python如何爬取京东的评价信息
Python如何爬取京东的评价信息 模块:requests,BeautifulSoup import re import time import csv import requests from bs ...
- python批量评论_python批量爬取京东手机评论信息及星级
本科生在读,如有问题欢迎指正 爬取京东评论信息:评论信息是动态加载的,所以在商品详情页不能直接爬取评论. 下面以一款手机为例,详细介绍python批量爬取京东评论. 找到评论区域 image.png ...
- python爬取京东商品代码_Python简单爬取京东商品列表
#!/usr/bin/python3 # -*- coding: UTF-8 -*- import urllib.request import urllib.error import re impor ...
- python websocket爬虫_Python如何爬取实时变化的WebSocket数据
一.前言 作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据.股市实时数据或币圈实时变化的数据.如下图: Web 领域中,用于实现数据'实时'更新的手段有轮询和 WebSo ...
- python xpath循环_Python爬虫 爬取北京二手房数据
点击蓝字"python教程"关注我们哟! 前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及 ...
- python输出古诗词_python爬虫——爬取古诗词
一. 概要 1.通过python爬虫循环爬取古诗词网站唐诗宋词 2.落地到本地数据库 二. 页面分析 首先通过firedebug进行页面定位: 其次源码定位: 最终生成lxml etree定位div标 ...
- python输出古诗词_python爬虫——爬取古诗名句
一. 概要 1.通过python爬虫循环爬取古诗词网站古诗名句 2.落地到本地数据库 二. 页面分析 首先通过firedebug进行页面定位: 其次源码定位: 最终生成lxml etree定位div标 ...
- python四级成绩_python 批量爬取四级成绩单
使用本文爬取成绩大致有几个步骤:1.提取表格(或其他格式文件--含有姓名,身份证等信息)中的数据,为进行准考证爬取做准备.2.下载准考证文件并提取出准考证和姓名信息.3.根据得到信息进行数据分析和存储 ...
最新文章
- array用法 numpy_NumPy总结(基础用法)
- MediaCoder转移动设备MP4(高清)
- IOS4.x下UIWebView的显示问题
- 02_记录学生相关数据,输出平均分数
- 《Total Commander:万能文件管理器》——第8.3节.张学思版预装的插件
- 线性回归 —— python
- 需求分析——调研需求时如何调查系统相关者?
- python爬虫(8)--Xpath语法与lxml库
- 开源 计划管理_公司开源计划的三大好处
- 全选 单选和反选的实现
- 方法的运用_运用正确管理方法缩减库存,助力企业发展
- L2-5 集合相似度 (set的应用)
- LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM
- HBuilderX:自定义代码块
- 使用rarcrack暴力破解RAR,ZIP,7Z压缩包
- (XWZ)的python学习笔记——pandas
- 安科瑞ACX电瓶车智能充电桩,充满自停,多样支付,10路端口,安全保护
- OSChina 周四乱弹 ——士可杀不可辱,这句话用英语怎么说?
- 地理坐标(经纬度)转换成投影坐标(XY坐标)
- java指针压缩临界值
热门文章
- 从万达百货到家乐福中国,苏宁如何快速消化“大块头”?
- (附源码)ssm校园拼车服务系统 毕业设计211633
- 开源Zip文件压缩算法 ICSharpCode.SharpZLib
- Chinese Rings 矩阵快速幂
- 计算机企业想法描述范文,产生你的企业想法.doc
- 中职计算机公开课说课稿,校内公开课说课稿
- 翻译Prism4碰到生单词
- 全球变暖迫在眉睫碳中和势在必行 碳森羿建议提前布局
- android 来电显示号码,android监控来电显示
- 芯片验证漫游指南_博通Wi-Fi芯片被曝安全漏洞,超10亿台终端或受影响,苹果、谷歌、小米、华为等大厂在列...