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大规模爬取京东相关推荐

  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批量爬取京东评论. 找到评论区域 image.png ...

  4. python爬取京东商品代码_Python简单爬取京东商品列表

    #!/usr/bin/python3 # -*- coding: UTF-8 -*- import urllib.request import urllib.error import re impor ...

  5. python websocket爬虫_Python如何爬取实时变化的WebSocket数据

    一.前言 作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据.股市实时数据或币圈实时变化的数据.如下图: Web 领域中,用于实现数据'实时'更新的手段有轮询和 WebSo ...

  6. python xpath循环_Python爬虫 爬取北京二手房数据

    点击蓝字"python教程"关注我们哟! 前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及 ...

  7. python输出古诗词_python爬虫——爬取古诗词

    一. 概要 1.通过python爬虫循环爬取古诗词网站唐诗宋词 2.落地到本地数据库 二. 页面分析 首先通过firedebug进行页面定位: 其次源码定位: 最终生成lxml etree定位div标 ...

  8. python输出古诗词_python爬虫——爬取古诗名句

    一. 概要 1.通过python爬虫循环爬取古诗词网站古诗名句 2.落地到本地数据库 二. 页面分析 首先通过firedebug进行页面定位: 其次源码定位: 最终生成lxml etree定位div标 ...

  9. python四级成绩_python 批量爬取四级成绩单

    使用本文爬取成绩大致有几个步骤:1.提取表格(或其他格式文件--含有姓名,身份证等信息)中的数据,为进行准考证爬取做准备.2.下载准考证文件并提取出准考证和姓名信息.3.根据得到信息进行数据分析和存储 ...

最新文章

  1. array用法 numpy_NumPy总结(基础用法)
  2. MediaCoder转移动设备MP4(高清)
  3. IOS4.x下UIWebView的显示问题
  4. 02_记录学生相关数据,输出平均分数
  5. 《Total Commander:万能文件管理器》——第8.3节.张学思版预装的插件
  6. 线性回归 —— python
  7. 需求分析——调研需求时如何调查系统相关者?
  8. python爬虫(8)--Xpath语法与lxml库
  9. 开源 计划管理_公司开源计划的三大好处
  10. 全选 单选和反选的实现
  11. 方法的运用_运用正确管理方法缩减库存,助力企业发展
  12. L2-5 集合相似度 (set的应用)
  13. LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM
  14. HBuilderX:自定义代码块
  15. 使用rarcrack暴力破解RAR,ZIP,7Z压缩包
  16. (XWZ)的python学习笔记——pandas
  17. 安科瑞ACX电瓶车智能充电桩,充满自停,多样支付,10路端口,安全保护
  18. OSChina 周四乱弹 ——士可杀不可辱,这句话用英语怎么说?
  19. 地理坐标(经纬度)转换成投影坐标(XY坐标)
  20. java指针压缩临界值

热门文章

  1. 从万达百货到家乐福中国,苏宁如何快速消化“大块头”?
  2. (附源码)ssm校园拼车服务系统 毕业设计211633
  3. 开源Zip文件压缩算法 ICSharpCode.SharpZLib
  4. Chinese Rings 矩阵快速幂
  5. 计算机企业想法描述范文,产生你的企业想法.doc
  6. 中职计算机公开课说课稿,校内公开课说课稿
  7. 翻译Prism4碰到生单词
  8. 全球变暖迫在眉睫碳中和势在必行 碳森羿建议提前布局
  9. android 来电显示号码,android监控来电显示
  10. 芯片验证漫游指南_博通Wi-Fi芯片被曝安全漏洞,超10亿台终端或受影响,苹果、谷歌、小米、华为等大厂在列...