python大规模爬取京东

主要工具

scrapy

BeautifulSoup

requests

分析步骤

打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点

我们可以看到这个页面并不是完全的,当我们往下拉的时候将会看到图片在不停的加载,这就是ajax,但是当我们下拉到底的时候就会看到整个页面加载了60条裤子的信息,我们打开chrome的调试工具,查找页面元素时可以看到每条裤子的信息都在

这个标签中,如下图:

接着我们打开网页源码就会发现其实网页源码只有前30条的数据,后面30条的数据找不到,因此这里就会想到ajax,一种异步加载的方式,于是我们就要开始抓包了,我们打开chrome按F12,点击上面的NetWork,然后点击XHR,这个比较容易好找,下面开始抓包,如下图:

从上面可以找到请求的url,发现有很长的一大段,我们试着去掉一些看看可不可以打开,简化之后的url='https://search.jd.com/s_new.php?keyword=裤子&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&offset=3&wq=裤子&page={0}&s=26&scrolling=y&pos=30&show_items={1}',这里的showitems是裤子的id,page是翻页的,可以看出来我们只需要改动两处就可以打开不同的网页了,这里的page很好找,你会发现一个很好玩的事情,就是主网页的page是奇数,但是异步加载的网页中的page是偶数,因此这里只要填上偶数就可以了,但是填奇数也是可以访问的。这里的show_items就是id了,我们可以在页面的源码中找到,通过查找可以看到id在li标签的data-pid中,详情请看下图

上面我们知道怎样找参数了,现在就可以撸代码了

代码讲解

首先我们要获取网页的源码,这里我用的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大规模爬取京东相关推荐

  1. python京东购买_python大规模爬取京东

    python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...

  2. python爬取京东评论_Python如何爬取京东的评价信息

    Python如何爬取京东的评价信息 模块:requests,BeautifulSoup import re import time import csv import requests from bs ...

  3. python爬虫抢演唱会_Python爬虫爬了七天七夜终于爬出了博客园粉丝数排行榜

    Python爬虫爬了七天七夜终于爬出了博客园粉丝数排行榜 [Python爬虫]爬了七天七夜,终于爬出了博客园粉丝数排行榜! 爬虫数据采集接单,大小不限,欢迎各位科研教师,学生,企业相关人员咨询,QQ: ...

  4. python基金预测分析_Python爬虫抓取基金数据分析、预测系统设计与实现

    版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156231.html 目前在开发一款基于Python的基金爬取.分析.预测系统,目前已经开 ...

  5. python爬虫资源大全_Python爬虫抓取纯静态网站及其资源(基础篇)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:程序员宝库 **( 想要学习Python?Python ...

  6. 利用python分析电商_Python实现爬取并分析电商评论

    现如今各种APP.微信订阅号.微博.购物网站等网站都允许用户发表一些个人看法.意见.态度.评价.立场等信息.针对这些数据,我们可以利用情感分析技术对其进行分析,总结出大量的有价值信息.例如对商品评论的 ...

  7. python爬虫提取人名_python爬虫—爬取英文名以及正则表达式的介绍

    python爬虫-爬取英文名以及正则表达式的介绍 爬取英文名: 一. 爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个csv ...

  8. python爬虫百度图片_python实现爬取百度图片的方法示例

    本文实例讲述了python实现爬取百度图片的方法.分享给大家供大家参考,具体如下: import json import itertools import urllib import requests ...

  9. python爬表格数据_python爬虫,爬取表格数据

    python爬虫,爬取表格数据 python爬虫,爬取表格数据 python爬虫,爬取全国空气质量指数 编程环境:Jupyter Notebook 所要爬取的网页数据内容如下图 python爬虫代码及 ...

最新文章

  1. 模拟电路基础秦世才_模拟电路电子技术基础知识
  2. python3 flask sqlalchemy 数据库操作
  3. IDC:PC时代将结束 微软谷歌是最大输家和赢家
  4. 修改html页面的title,可以自定义
  5. python网络爬虫系列(三)——cookie的原理、保存与加载
  6. 最早单机的计算机操作系统,川农《计算机操作系统(本科)》19年12月在线作业【满分答案】...
  7. 表级锁的mysql读写_Mysql的表级锁
  8. HDU2476:String painter(区间dp)
  9. 【截至2006.12.31】毒霸反间谍可清除的部分流氓软件清单
  10. iocomp控件 Crack V512-sp6
  11. java 正则表达式 tab_JAVA 正则表达式 (超详细)
  12. linux realtek声卡驱动下载,下载:Realtek HD Audio音频驱动2.06版
  13. 我对数据分析的几点感悟
  14. Laravel CSRF token mismatch
  15. 题目58 工厂流水线调度(ok)
  16. Sa-Token浅谈
  17. 三维空间的三角剖分( 3D Delaunay Triangulated graph)第二部分:剖分三维空间
  18. 令人肝肠寸断的100个签名
  19. 我最希望成最没成的屏幕情侣....
  20. 老牌硬件钱包Trezor用户遭钓鱼攻击,攻击者或已窃取大量账户信息

热门文章

  1. SkyWalking8.4监控跨线程问题解决
  2. ios版本与xcode版本
  3. 你运营的公众号文章阅读量上不来,怎么回事?
  4. 电压(电流)运算放大器为什么要增大(减小)输入阻抗?
  5. 万字长文,从原理角度科普人工智能技术点!!
  6. 呼叫系统管理服务器图片,电话呼叫中心系统架构,电话呼叫系统软件
  7. 【COCOS2DX-游戏开发之七】添加启动数字输入法的功能
  8. 浪潮财务软件 系统表预检查: 对象 ID X。无法使用闩锁类型 SH 读取并闩锁页 。由于不可修复的错误,CHECK 语句已终止。
  9. 信创云领未来,华云数据打造科技强国新基座
  10. 软件测试学习资料大全