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

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

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

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

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

环境介绍:

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

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

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

第三方模块

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

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

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

这个是我的浏览器版本


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


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

其他几个的话就不多说了

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

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

解决登录

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

def search_product(keyword):
    
    driver.find_element_by_xpath('//*[@id="q"]').send_keys(keyword)

    time.sleep(random.randint(1, 3))
    driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()
    time.sleep(random.randint(1, 3))
    
    driver.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(TAO_USERNAME)
    time.sleep(random.randint(1, 3))
    driver.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(TAO_PASSWORD)
    time.sleep(random.randint(1, 3))

    driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()
    time.sleep(random.randint(1, 3))

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

def parse_data():
   
    # 多个商品数据解析
    divs = driver.find_elements_by_xpath('//div[@class="grid g-clearfix"]/div/div')  # 所有的div标签

    for div in divs:  # 二次提取
        try:
            info = div.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
            price = div.find_element_by_xpath('.//strong').text + '元'  # 商品价格  # 手写
            deal = div.find_element_by_xpath('.//div[@class="deal-cnt"]').text  # 付款人数  # 手写
            name = div.find_element_by_xpath('.//div[@class="shop"]/a/span[2]').text  # 店铺名称  # 手写
            location = div.find_element_by_xpath('.//div[@class="location"]').text  # 店铺地址  # 手写
            detail_url = div.find_element_by_xpath('.//div[@class="pic"]/a').get_attribute('href')  # 详情页地址  # 手写

            print(info, price, deal, name, location, detail_url, sep='|')

            with open('淘宝.csv', mode='a', encoding='utf-8', newline='')  as f:
                csv_write = csv.writer(f)
                csv_write.writerow([info, price, deal, name, location, detail_url])
        except:
            continue

实现根据关键字搜索商品

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

浏览器操作

创建一个浏览器

driver = webdriver.Chrome()

修改浏览器的属性

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

执行浏览器操作

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

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

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

driver.implicitly_wait(10)

最大化浏览器

driver.maximize_window()

搜索商品和解析商品

search_product(word)

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

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

完整的免费源码领取处:

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

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

关于解答——

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

.

相关文章