pythonselenium提高爬虫效率_结合Selenium和正则表达式提高爬虫效率

本文介绍了如何使用Python的Selenium库配合正则表达式提高爬虫效率。首先,通过Selenium模拟登录aliexpress.com并获取cookie。接着,解决异步加载页面问题,利用Selenium模拟下拉获取商品URL,或直接从HTML源码中提取商品信息。然后,通过正则表达式抓取商品详情页的多个元素,如材质、颜色、库存等,并将数据存储到MySQL数据库。最后,讨论了优化策略,如减少浏览器实例化以提高爬虫速度。
摘要由CSDN通过智能技术生成

任务

爬取https://www.aliexpress.com/wholesale?SearchText=cartoon+case&d=y&origin=n&catId=0&initiative_id=SB_20200523214041这个页面下的商品详情,由于页面是异步加载的,需要使用Selenium模拟浏览器来获取商品url。但直接使用Selenium定位网页元素速度又很慢,因此需要结合Re或者BeautifulSoup来提高爬取效率。

模拟登陆

使用Selenium模拟登录,登录成功后获取cookie。

def login(username, password, driver=None):

driver.get('https://login.aliexpress.com/')

driver.maximize_window()

name = driver.find_element_by_id('fm-login-id')

name.send_keys(username)

name1 = driver.find_element_by_id('fm-login-password')

name1.send_keys(password)

submit = driver.find_element_by_class_name('fm-submit')

time.sleep(1)

submit.click()

return driver

browser = webdriver.Chrome()

browser = login('Wheabion1944@dayrep.com','ab123456',browser)

browser.get('https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&SearchText=cartoon+case&ltype=wholesale&SortType=default&page=')

这个网站对用户监管不严,使用邮箱注册都不需要进行验证,可以用这个网站获取假邮箱进行注册:http://www.fakemailgenerator.com/

其实后续真正运行程序爬的时候并没有登录,爬了十页也没碰到反爬。

获取商品详情页的URL

这一过程需要解决的问题在于该网页是ajex异步加载的,网页不会在打开的同时加载全部数据,在下拉的同时网页刷新返回新的数据包并渲染,因此通过request无法一次性读到网页的全部源码。解决思路是通过Selenium来模拟浏览器下拉行为以获取一页内全部的数据,然后暂时还是通过sel去获取元素。

登录后打开任务需要的页面会出现广告弹窗,首先需要关闭广告弹窗:

def close_win(browser):

time.sleep(10)

try:

closewindow = browser.find_element_by_class_name('next-dialog-close')

browser.execute_script("arguments[0].click();", closewindow)

except Exception as e:

print(f"searchKey: there is no suspond Page1. e = {e}")

模拟下拉行为并获取一页中全部商品的url:

def get_products(browser):

wait = WebDriverWait(browser, 1)

for i in range(30):

browser.execute_script('window.scrollBy(0,230)')

time.sleep(1)

products = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME,"product-info")))

if len(products) >= 60:

break

else:

print(len(products))

continue

products = browser.find_elements_by_class_name('product-info')

return products

后来经学长指点发现不需要这么麻烦,搜索页的商品信息虽然是经过下滑操作才会通过JS动态渲染,但商品信息其实都是写在html文档里的,可以通过以下方式获取:

url = 'https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&SearchText=cartoon+case&ltype=wholesale&SortType=default&page='

driver

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值