失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战

python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战

时间:2021-06-17 00:03:03

相关推荐

python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战

1.前言

继续学习爬虫内容,这回是以selenium模拟操作进行抓取,其中有几个需要登陆的注意事项。

2.自动登陆+查找页面

由于现在淘宝的反爬机制,需要登陆才好下一步操作。在搜索输入后页面会调入登陆界面,经过测试发现微博登陆是不需要验证码的,如果使用账号密码登陆是要滑动,但反爬更加严格,笔者暂时没有解决。也尝试过加cookie,也失败了。因此最好的方法还是利用微博账号自动登录。

登录后获取总页数,并返回。

代码如下:

def search_page():browser.get('')#sleep(5)input = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#q')))#submit = wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,"#J_TSearchForm > div.search-button"))browser.find_element_by_name('q').send_keys('美食')browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click() ##搜索按钮sleep(3)#选择微博登录browser.find_element_by_xpath('//*[@id="J_OtherLogin"]/a[1]').click() #自动填入账号密码browser.find_element_by_name('username').send_keys('微博账号')browser.find_element_by_name('password').send_keys('微博密码')#a=input('请输入验证码:',) #如果有验证码,注释去掉#browser.find_element_by_name('verifycode').send_keys(a)#点击登陆browser.find_element_by_xpath('//*[@id="pl_login_logged"]/div/div[7]/div[1]/a').click()sleep(5)totalPage = browser.find_element_by_css_selector('#mainsrp-pager > div > div > div > div.total')return totalPage.text

3.自动翻页

自动翻页的操作原理是在下方的翻页按钮除读取高亮显示的页面(即代表目前页面),清除输入页面框内的数字,再填入下一页数字,再点击确定即可翻页。

代码如下:

def next_page(page_number):try:get_products()inputFrame = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.form > input')))submitButton = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit")))inputFrame.clear()inputFrame.send_keys(page_number)submitButton.click()wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_number))) except TimeoutException:next_page(page_number)

4.获取产品信息

查看每个产品的属性即可,分别放入字典并写入文件。

def get_products():wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))doc = pq(browser.page_source)items = doc('#mainsrp-itemlist .items .item').items() #生成迭代器for item in items:img = "https:" + item.find('.pic .img').attr('src')product = {'img':img,'price':item.find('.price g_price').text(),'deal':item.find('.deal-cnt').text()[:-3],'title':item.find('.title').text(),'shop':item.find('.shop').text(),'location':item.find('.location').text()}with open("/。。。/products.txt", 'a') as f:f.write(str(product) + '\n' + '\n')

5.主程序

使用一个循环将所有页面的产品写入即可。

def main():totalpage = search_page()totalpage = int(pile(r'(\d+)').search(totalpage).group(1))for i in range(2, totalpage+1):next_page(i)

如果觉得《python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。