进阶4·淘宝商品爬取与分析(selenium,网页元素无法定位的四个解决办法)

淘宝估计是爬虫界一直想要去尝试的网页,小彬自学爬虫已有一段时间,在掌握selenium后就一直想要本着学习交流的态度和淘宝程序员叔叔切磋一下,嘻嘻。

唉,没想到这一切磋就耗费了我一天时间,不过还好,最后也小有成就,并且这次收获也不少,尤其对于网页的反蜘蛛机制。
我先梳理下遇到的困难:

1·网页登入,淘宝账号登入需要滑动验证码;支付宝账号登入,却找不到密码输入框标签。唉,愁死个人了
2·成功登入后,下一页标签居然是变动的,,,这谁能想的到呀。唉,等我发现这个问题的时候已经下午了
3·页面加载问题,加载不完全,获取到的数据就不全,甚至连下一页的标签都找不到

解决方案:
1·要是选择淘宝账号登入的话,那就拿fiddler替换js吧,其他的小彬也没啥子办法;要是支付宝账号登入的话,,我,,扫码登行不行,实在找不到输入框标签呀
2·标签变动还好说啦,找到规律就好了。
3·页面加载那就设置时间等待吧,只要时间充足,一个页面你等一个小时也没问题。还需要考虑到网络问题,有时报错不是因为匹配不对,就是网不好

(小彬还是一个小小白,要是有大神看帖莫喷,毕竟从学Python到现在就没人带过,全靠自己摸索。对了,在爬取到十几页的时候被淘宝发现了,,,,,我也没再继续修改程序,获取到的数据不是太多)

数据分析:
数据分析小彬暂且还没学习,只能做些简单的分析:排名,云图之类的,勿怪


import time
import random
from selenium import webdriver
from urllib.parse import quote
from pyquery import PyQuery as PQ
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 驱动
__browser_url = r'D:\软件安装地址\360Chrome\Chrome\Application\360chrome.exe'
chrome_options = Options()
chrome_options.binary_location = __browser_url
driver = webdriver.Chrome(chrome_options=chrome_options)

# 窗口界面设置

#元素无法定位解决方案1

wait = WebDriverWait(driver, 10)    # 10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。 
driver.get(
    'https://auth.alipay.com/login/index.htm?loginScene=7&goto=https%3A%2F%2Fauth.alipay.com%2Flogin%2Ftaobao_trust_login.htm%3Ftarget%3Dhttps%253A%252F%252Flogin.taobao.com%252Fmember%252Falipay_sign_dispatcher.jhtml%253Ftg%253D&params=VFBMX3JlZGlyZWN0X3VybD0%3D')
driver.maximize_window()  # 窗口最大化
driver.implicitly_wait(3)
driver.find_element_by_xpath('//*[@id="J-loginMethod-tabs"]/li[2]').click()
time.sleep(1)

# 输入账号密码
driver.find_element_by_xpath('//*[@id="J-input-user"]').send_keys('XXXXXXXX')
time.sleep(15)
driver.find_element_by_class_name('ui-button').click()

# 输入商品
driver.find_element_by_xpath('//*[@id="q"]').send_keys("篮球鞋")
driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#q')))  # 等界面完全加载


def get_texts():

    html = driver.page_source
    pq_file = PQ(html)
    all = pq_file('#mainsrp-itemlist .items .item').items()
#提取所需信息
    for i in all:
        text = [
            i.find('.price').text(),
            i.find('.deal-cnt').text(),
            i.find('.title').text(),
            i.find('.shop').text(),
            i.find('.location').text()]
        print(text
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值