双十一福利!爬取电商平台商品详情!买东西我们只买优质产品!

x33g5p2x  于2021-11-21 转载在 其他  
字(3.2k)|赞(0)|评价(0)|浏览(392)

嗨 ,兄弟们晚上好啊!
下午爬完京东,我们晚上再试试淘宝,剁手之路永不停歇!

其实我不太想爬的,没办法被媳妇知道了,说要在淘宝买东西,自己懒得看,让我用代码去分析分析。
害,有这时间打两把无限火力他不香吗!

反正都爬完了,整理出来发给大家参考一下吧。

环境介绍:

  • python 3.6
  • pycharm
  • selenium
  • csv
  • time
  • random

python解释器安装包、安装教程
pycharm代码编辑器安装包、安装教程、激活码
Chrome浏览器Webdriver插件安装教程
xpath-helper插件安装教程

这些如果没有的话,可以在文末获取。

第三方模块

selenium python模块 操作浏览器驱动 pip install selenium

这里简单的说下chromedriver (谷歌驱动)

浏览器驱动用来自动翻页的,下载跟你安装的谷歌浏览器版本最相近的版本,放到你的Python安装目录,或者跟你的代码放在同一个文件夹中就好了。

这个是我的浏览器版本


这是跟我对应版本的驱动插件


下载好解压出来长这样子,我这里把它跟代码放一起了。

其他几个的话就不多说了

导入模块
先导入一下要用的模块,注释够详细了吧。

  1. from selenium import webdriver # 导入selenium模块的浏览器功能
  2. import random # 随机数据模块 设置随机等待
  3. import time # 时间模块, 这是等待的时间<随机> 内置模块, 安装解释器的时候自带的
  4. from constants import TAO_USERNAME, TAO_PASSWORD # 导入用户信息
  5. import csv # 数据保存 # 内置模块

解决登录

我们要根据关键字搜索商品, 解决登录,避免淘宝检测selenium, 尽量的模拟用户操作去解决登录,淘宝登录它是有js 加密的, js会检测selenium自动登录, 最好是学学JS解密。

  1. def search_product(keyword):
  2. driver.find_element_by_xpath('//*[@id="q"]').send_keys(keyword)
  3. time.sleep(random.randint(1, 3))
  4. driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()
  5. time.sleep(random.randint(1, 3))
  6. driver.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(TAO_USERNAME)
  7. time.sleep(random.randint(1, 3))
  8. driver.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(TAO_PASSWORD)
  9. time.sleep(random.randint(1, 3))
  10. driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()
  11. time.sleep(random.randint(1, 3))

解析数据
这里我们要对多个商品数据解析,所有的div标签,然后进行二次提取商品价格、付款人数、店铺名称、店铺地址、详情页地址

  1. def parse_data():
  2. # 多个商品数据解析
  3. divs = driver.find_elements_by_xpath('//div[@class="grid g-clearfix"]/div/div') # 所有的div标签
  4. for div in divs: # 二次提取
  5. try:
  6. info = div.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
  7. price = div.find_element_by_xpath('.//strong').text + '元' # 商品价格 # 手写
  8. deal = div.find_element_by_xpath('.//div[@class="deal-cnt"]').text # 付款人数 # 手写
  9. name = div.find_element_by_xpath('.//div[@class="shop"]/a/span[2]').text # 店铺名称 # 手写
  10. location = div.find_element_by_xpath('.//div[@class="location"]').text # 店铺地址 # 手写
  11. detail_url = div.find_element_by_xpath('.//div[@class="pic"]/a').get_attribute('href') # 详情页地址 # 手写
  12. print(info, price, deal, name, location, detail_url, sep='|')
  13. with open('淘宝.csv', mode='a', encoding='utf-8', newline='') as f:
  14. csv_write = csv.writer(f)
  15. csv_write.writerow([info, price, deal, name, location, detail_url])
  16. except:
  17. continue

实现根据关键字搜索商品

  1. word = input('请输入你要搜索商品的关键字:')

浏览器操作

创建一个浏览器

  1. driver = webdriver.Chrome()

修改浏览器的属性

  1. driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
  2. {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})

执行浏览器操作

  1. driver.get('https://www.taobao.com/')

get 是driver一个方法, 内部传一个地址,driver.get() 不是函数, 是driver对象的一个方法, 方法的调用和自定义函数调用是有区别的。

智能化等待: 页面渲染加载过程需要时间

  1. driver.implicitly_wait(10)

最大化浏览器

  1. driver.maximize_window()

搜索商品和解析商品

  1. search_product(word)
  2. for page in range(0, 100): # 0123456...
  3. print(f'\n========================正在抓取第{page + 1}页数据=========================')
  4. driver.get(f'https://s.taobao.com/search?q={word}&s={page * 44}')
  5. parse_data()
  6. time.sleep(random.randint(2, 4))

我们在执行浏览器的自动化操作的时候,用户平常怎么操作页面, 那么咱们代码逻辑和用户操作的页面的逻辑大致一样。
验证码主要是验证人机行为,一般是滑动, 点选, 普通验证码。

完整的免费源码领取处:

完整源码+对应视频教程基地见:#点击蓝色文字添加即可获取免费的福利!

兄弟萌,我最大的动力就是来自你们的支持!!看完记得点赞收藏三连哈!

关于解答——

兄弟们在Python学习中遇到问题、有时间会给大家解答的!大家自行添加哈~

.

相关文章