#介绍:最近在学习Python的一些相关知识,爬虫是其中有趣的一项,现在把学习的过程整理出来,给自己留个印记。
##Selenium爬取天猫手机数据
淘宝的反爬虫有点厉害,光是登陆就研究了小一天,先是尝试模拟输入用户名和密码,但是会出现让拖动滑块,又研究拖动滑块,拖完显示“哎呀,出错了”,尝试了几次依然以失败告终。网上查资料过程中看到有说用微博账号直接登陆的,不会出现滑块问题,我是选择了直接半自动:手工扫码登陆(就是举着手机眼巴巴等二维码,生怕影响整个程序的运行)。
学习参照“Python3爬虫三大案例实战分享 / Selenium+Chrome/PhantomJS抓取
淘宝美食(无登陆环节)”链接:lhttps://edu.hellobi.com/course/156/play/lesson/2454
(Chrome和chromedriver要对应,这个也需要注意)
以下是爬取天猫的代码:

from selenium import webdriver
import time
import pandas as pd
from pandas import DataFrame
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from pyquery import PyQuery as pq#路径为chromedriver.exe下载位置,
browser = webdriver.Chrome("D:\DRIVE\chromedriver.exe")
wait=WebDriverWait(browser,10)
df_a=DataFrame()def search():browser.get("https://s.taobao.com")browser.maximize_window()browser.find_element_by_css_selector('#q').send_keys('手机')browser.find_element_by_css_selector('#J_SearchForm > div > div.search-button > button').click()time.sleep(5)#留取5秒时间进行扫码登陆browser.find_element_by_css_selector('#tabFilterMall').click()time.sleep(3)get_products()#定义翻页
def next_page():for i in range (2,11):#等待加载到页码显示区WebDriverWait(browser, 5).until(ec.visibility_of_element_located((By.XPATH, '//*[@id="mainsrp-pager"]/div/div/div/div[2]')))input=browser.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[2]/input')submit=browser.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[2]/span[3]')input.clear()input.send_keys(i)submit.click()#等待加载到页码颜色高亮wait.until(ec.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > ul > li.item.active > span'),str(i)))get_products()time.sleep(5)#定义获取页面信息
def get_products():
#先定义到最外层标签WebDriverWait(browser, 5).until(ec.visibility_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))#mainsrp-itemlist > div > div > div:nth-child(1)#解析页面html=browser.page_sourcedoc=pq(html)items=doc('#mainsrp-itemlist .items .item').items()for item in items:#抓取所需内容product={'price':item.find('.price').text(),'deal':item.find('.deal-cnt').text()[:-3],'title':item.find('.title').text(),'shop':item.find('.shop').text(),'location':item.find('.location').text()}print(product)#将字典转为表格保存为CSV格式df = pd.DataFrame(product,index=[0])df.to_csv('taobao.csv', mode='a', encoding='utf_8_sig', header=False)def main():search()next_page()browser.close()if __name__ == "__main__":main()

##requests爬取京东手机数据:
京东的爬取不需要登录,但是爬取的内容里有Ajax数据,需要在network中刷新找到数据所在的url及规律。 学习参照:http://www.dajiangtai.com/user/course.do
以下为爬取京东的代码:

import requests
import pandas as pd
from lxml import etree
from pandas import DataFrame
from fake_useragent import UserAgent
import random
import time
import repinfoall=DataFrame()
pinfo=DataFrame()for i in range (1,11):url="https://list.jd.com/list.html?cat=9987,653,655&page=+str(i)"#构造uaua=UserAgent()usa=[]for i in range(5):usa.append(ua.random)this_ua=random.choice(usa)head={"user-agent":this_ua}res=requests.get(url,headers=head)res.encoding="UTF-8"#xpath方法爬取nameroot=etree.HTML(res.text)name=root.xpath('//div[@class="p-name"]/a/em/text()')#去掉name两边的空格for i in range (len(name)):name[i]=name[i].strip()#xpath方法爬取shopshop=root.xpath('//div[@class="p-shop"]/@data-shop_name')#price和commentcount为Ajax数据,抓取sku规律,构造新的URL,用正则方法爬取信息sku=root.xpath('//li[@class="gl-item"]/div/@data-sku')price=[];commentcount=[]for i in range (len(sku)):this_sku=sku[i]price_url="http://p.3.cn/prices/mgets?callback=jQuery9111744&ext=11101100&pin=&type=1&area=11_799_801_32705&skuIds=J_"+this_sku+"%2C"comment_url="http://club.jd.com/comment/productCommentSummaries.action?my=pinglun&referenceIds="+this_sku+"&callback=jQuery3709295&_=1563184435484"price_res=requests.get(price_url)comment_res=requests.get(comment_url)pat='"p":"(.*?)"'commentpat='"CommentCount":(.*?),'this_price=re.findall(pat,price_res.text)price=price+this_pricethis_commentcount=re.findall(commentpat,comment_res.text)commentcount=commentcount+this_commentcountpinfoall=DataFrame([name,shop,price,commentcount]).Tpinfoall=pd.concat([pinfoall,pinfo])#保存爬出信息到本地pinfoall.to_csv('jingdong.csv', mode='a', encoding='utf_8_sig', header=False)time.sleep(2)
pinfoall.head()

部分数据展示:


##对输出的天猫数据进行整理分析:


连续30天内各类手机销量情况,华为系列高居第一,其他类手机主要包括关键词如下:红魔、美图、一加、天语等。(用wordart可以一键生成)

淘宝不像京东有自己的仓库和自营店铺就近匹配发货,所以店铺都有自己的位置,如下获取不同省份店铺销售额:广东省遥遥领先,其次是江苏省,北京位于第三。沿海和一线城市销售额居高,考虑为城市自身经济带动,沿海方便进出口,华为总部在深圳等。(工具:Tableau-地图)

##对输出的京东数据进行整理分析:


根据京东商城累计评价数(找不到销量数)大致推得,销量第一为华为系列,其次为Apple产品,再是小米。
##两平台均价比较(人数所取指标不同,销量不具有可比性):


由图可以看出,华为系列、Apple产品、小米、vivo两平台价格相仿,oppo、魅族、三星手机等价格天猫比京东稍高(三星手机在售较少,版本不一可能影响结果)。

##爬取京东商城手机商品中的第一个华为P30 pro商品评论,用wordart显示关键词。
学习参考:https://blog.csdn.net/hah159/article/details/90257980
以下为爬取评论代码:

from selenium import webdriver
from time import sleep
import pandas as pd
from pandas import DataFrame
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
from selenium.common.exceptions import StaleElementReferenceExceptionbrowser = webdriver.Chrome("D:\DRIVE\chromedriver.exe")  #调用驱动,其中路径为下载存放路径
wait=WebDriverWait(browser,10)
try:browser.get('https://item.jd.com/100002795959.html#none')  # 直接打开转入商品界面网页browser.maximize_window()#页面最大化button = browser.find_element_by_xpath("//li[@clstag='shangpin|keycount|product|shangpinpingjia_1']")  # 获取商品评论按钮button.click()  # 点击评论按钮sleep(10)
except Exception as e:print(e)def get_comment():infoall = DataFrame()datetime=browser.find_elements_by_xpath("//div[@class='order-info']/span[4]")# 获取时间user = browser.find_elements_by_xpath("//div[@class='user-info']")  # 获取用户名comment = browser.find_elements_by_xpath("//p[@class='comment-con']")  # 获取评论sleep(5)#提取其中的文本信息for i in range(len(user)):datetime[i]=datetime[i].textuser[i] = user[i].textcomment[i] = comment[i].text#将爬取内容保存到CSV文件info = DataFrame([datetime,user, comment]).Tinfoall = pd.concat([infoall,info])infoall.to_csv('comments.csv', mode='a', encoding='utf_8_sig', header=False)def next_page():for n in range(10):  # 进行10次循环m = n + 1print(m)#显示爬取进度get_comment()#爬取评论sleep(5)#加载到“下一页”位置try:next_page_n= wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, '#comment-0 > div.com-table-footer > div > div > a.ui-pager-next')))sleep(5)  # 休息五秒# 点击下一页next_page_n = browser.find_element(By.CSS_SELECTOR, '#comment-0 > div.com-table-footer > div > div > a.ui-pager-next')next_page_n.click()sleep(5) # 在click后面休息几秒,防止在数据尚未爬完前换页except StaleElementReferenceException:next_page()def main():next_page()browser.close()if __name__ == "__main__":main()

部分数据展示:


#粗略记录,入坑打卡。

Python爬虫—手机销量相关推荐

  1. python爬虫手机app数据库_Python3网络爬虫(十三):王者荣耀那些事!(Fiddler之手机APP爬取)...

    运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言 暑假回家,"小皇帝"般的生活持续了几天,头几天还挺舒服,闲久了顿 ...

  2. 记录一下python爬虫手机app遇到的加密

    有时候遇到参数加密,看源码然后python复现 MD5 import hashlib md5_str = "ZG#)@F01Method.." # 待加密字符串 md = hash ...

  3. python爬虫手机验证码登录_python爬虫解决手机验证码问题

    一.安卓手机安装tasker软件增强工具 官网:https://tasker.joaoapps.com/ 网上也有中文版的,自行搜索 1.打开tasker界面,点击右下加号 2.点击配置文件类型,选择 ...

  4. 爬虫学习之抓取手机销量排名

    最近苹果手机新热点,iPhone13系列有望支持息屏显示.关注了一网友们的评论,大家都表示这难道不是安卓早就支持的吗?怎么在苹果这里还只是有望实现呢?而且很多使用苹果手机的用户表示能不能在手机的信号和 ...

  5. python爬虫实例手机_Python爬虫实现爬取京东手机页面的图片(实例代码)

    实例如下所示: __author__ = 'Fred Zhao' import requests from bs4 import BeautifulSoup import os from urllib ...

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

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

  7. 【python 爬虫】百度手机助手爬虫

    一.需求分析: 抓取百度手机助手软件应用,导出EXCEL和插入mysql.字段包括: 1. app_name:应用名称2. app_pic:应用logo3. app_score:应用评分4. app_ ...

  8. python爬虫app步骤_Python爬虫抓取手机APP的传输数据,python爬虫抓取app

    Python爬虫抓取手机APP的传输数据,python爬虫抓取app 大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1. ...

  9. 《Python爬虫100例》复盘⑦,解决手机APP爬虫环境问题

    文章目录 案例 41:Fiddler+夜神模拟器 案例 42:爬取儿歌多多APP数据 案例 43:百思不得姐APP数据 案例 44:Charles安装与使用 案例 45:Charles抓取兔儿故事 案 ...

最新文章

  1. RIP路由协议快速入门(二)
  2. 【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )
  3. C++实现堆排序(附完整源码)
  4. c++反汇编与逆向分析技术揭秘_C++反汇编与逆向分析技术揭秘
  5. 运河杯交通违章 运行不起来
  6. 浅说 Rewrite规则简介
  7. linux nmap
  8. Mysql学习总结(22)——Mysql数据库中制作千万级测试表
  9. 机器学习入门笔记总目录
  10. JavaScript之基础-9 JavaScript String(内置对象、String概述、字符串常用操作、模式匹配)...
  11. 经验分享 PDF如何旋转页面,替换页面
  12. 2019年1月起Oracle要对JDK8就要收费了!
  13. win7远程桌面连接问题解决方案
  14. 下一个韦神?广西桂林14岁初中生保送清华丘班,明年本硕博连读!
  15. 有机会向面试官提问时,你应该问这 11 个问题
  16. uchome的Ajax
  17. 中国云计算的十年江湖
  18. ORACLE介质管理库MML
  19. 微信 考勤 php,JavaScript_微信企业号开发之微信考勤Cookies的使用,在上篇文章给大家介绍了微信 - phpStudy...
  20. Luat 功能开发教程(十六) LittleVGL

热门文章

  1. FQQ兵法,适用于各种版本以及种族
  2. python单向认证_使用Python进行单向方差分析的四种方法
  3. 51单片机c语言程序执行顺序,51单片机程序执行流程详细分析
  4. Intel CPU型号解读以及如何粗略判断Intel CPU的性能(i3、i5、i7以及CPU的代数)
  5. 网页 php,怎么用php写一个网页
  6. threejs修改camera的lookAt无效怎么办
  7. Android开发——网络请求(一)网络请求的API、授权和方法
  8. 有AI就不搬砖?超乎你的想象!道翰天琼认知智能机器人平台API接口大脑为您揭秘。
  9. IB书单推荐:没有所谓的“闲书”
  10. 解决Error:L6218E:Undefined symbol TimingDelay_Decrement (referred from stm32f2xx_it.o)问题