爬虫_淘宝(selenium)
总体来说代码还不是太完美
实现了js渲染网页的解析的一种思路
主要是这个下拉操作,不能一下拉到底,数据是在中间加载进来的,
具体过程都有写注释
1 from selenium import webdriver 2 import time 3 from selenium.webdriver.support.ui import WebDriverWait 4 from selenium.webdriver.support import expected_conditions as EC 5 from selenium.webdriver.common.by import By 6 from lxml import etree 7 import re 8 import pymongo 9 10 client = pymongo.MongoClient('127.0.0.1', port=27017) 11 db = client.taobao_mark 12 collection = db.informations 13 14 15 def search(url): 16 17 # 设置无头浏览器 18 opt = webdriver.ChromeOptions() 19 opt.set_headless() 20 driver = webdriver.Chrome(options=opt) 21 driver.get(url) 22 23 # 使用显示等待加载输入文本框,设置搜索关键字,以'轻薄本'为例 24 input_key = WebDriverWait(driver, 10).until( 25 EC.presence_of_element_located((By.ID, 'q'))) 26 input_key.send_keys('轻薄本') 27 28 # 显示等待加载搜索按钮,然后执行点击操作 29 search_btn = WebDriverWait(driver, 10).until( 30 EC.presence_of_element_located((By.CLASS_NAME, 'btn-search'))) 31 search_btn.click() 32 33 # 搜索出来的网页内容只有一行与关键字相关,剩下的都是广告 34 # 此时发现更多相关内容在//span[@class="see-all"]这个标签的链接中, 35 # 通过xpath获取链接,进行跳转 36 element = etree.HTML(driver.page_source) 37 list_page_url = element.xpath('//span[@class="see-all"]/a/@href')[0] 38 list_page_url = 'https://s.taobao.com/' + list_page_url 39 driver.close() 40 return list_page_url 41 42 43 def scroll(driver): 44 # 如果没有进行动态加载,只能获取四分之一的内容,调用js实现下拉网页进行动态加载 45 for y in range(7): 46 js='window.scrollBy(0,600)' 47 driver.execute_script(js) 48 time.sleep(0.5) 49 50 51 def get_detail_url(url): 52 53 # 用来存储列表页中商品的的链接 54 detail_urls = [] 55 56 opt = webdriver.ChromeOptions() 57 opt.set_headless() 58 driver = webdriver.Chrome(options=opt) 59 # driver = webdriver.Chrome() 60 driver.get(url) 61 62 scroll(driver) 63 64 # 通过简单处理,获取当前最大页数 65 max_page = WebDriverWait(driver, 10).until( 66 EC.presence_of_element_located((By.XPATH, '//div[@class="total"]')) 67 ) 68 text = max_page.get_attribute('textContent').strip() 69 max_page = re.findall('\d+', text, re.S)[0] 70 # max_page = int(max_page) 71 max_page = 1 72 # 翻页操作 73 for i in range(1, max_page+1): 74 print('正在爬取第%s页' % i) 75 # 使用显示等待获取页面跳转页数文本框 76 next_page_btn = WebDriverWait(driver, 10).until( 77 EC.presence_of_element_located((By.XPATH, '//input[@class="input J_Input"]')) 78 ) 79 80 # 获取确定按钮,点击后可进行翻页 81 submit = WebDriverWait(driver, 10).until( 82 EC.element_to_be_clickable((By.XPATH, '//span[@class="btn J_Submit"]')) 83 ) 84 85 next_page_btn.clear() 86 next_page_btn.send_keys(i) 87 # 这里直接点击会报错'提示不可点击',百度说有一个蒙层, 88 # 沉睡两秒等待蒙层消失即可点击 89 time.sleep(2) 90 submit.click() 91 scroll(driver) 92 93 urls = WebDriverWait(driver, 10).until( 94 EC.presence_of_all_elements_located((By.XPATH, '//a[@class="img-a"]')) 95 ) 96 for url in urls: 97 detail_urls.append(url.get_attribute('href')) 98 driver.close() 99 # 返回所有商品链接列表 100 return detail_urls 101 102 def parse_detail(detail_urls): 103 parameters = [] 104 opt = webdriver.ChromeOptions() 105 opt.set_headless() 106 driver = webdriver.Chrome(options=opt) 107 for url in detail_urls: 108 parameter = {} 109 110 print('正在解析网址%s' % url) 111 driver.get(url) 112 html = driver.page_source 113 element = etree.HTML(html) 114 115 # 名字name 116 name = element.xpath('//div[@class="spu-title"]/text()') 117 name = name[0].strip() 118 parameter['name'] = name 119 120 # 价格price 121 price = element.xpath('//span[@class="price g_price g_price-highlight"]/strong/text()')[0] 122 price = str(price) 123 parameter['price'] = price 124 125 # 特点specials 126 b = element.xpath('//div[@class="item col"]/text()') 127 specials = [] 128 for i in b: 129 if re.match('\w', i, re.S): 130 specials.append(i) 131 parameter['specials'] = specials 132 133 param = element.xpath('//span[@class="param"]/text()') 134 # 尺寸 135 size = param[0] 136 parameter['size'] = size 137 # 笔记本CPU 138 cpu = param[1] 139 parameter['cpu'] = cpu 140 # 显卡 141 graphics_card = param[2] 142 parameter['graphics_card'] = graphics_card 143 # 硬盘容量 144 hard_disk = param[3] 145 parameter['hard_disk'] = hard_disk 146 # 处理器主频 147 processor = param[4] 148 parameter['processor'] = processor 149 # 内存容量 150 memory = param[5] 151 parameter['memory'] = memory 152 parameter['url'] = url 153 print(parameter) 154 print('='*50) 155 save_to_mongo(parameter) 156 parameters.append(parameter) 157 return parameters 158 159 160 def save_to_mongo(result): 161 try: 162 if collection.insert(result): 163 print('success save to mongodb', result) 164 except Exception: 165 print('error to mongo') 166 167 168 def main(): 169 url = 'https://www.taobao.com/' 170 list_page_url = search(url) 171 detail_urls = get_detail_url(list_page_url) 172 parameters = parse_detail(detail_urls) 173 174 if __name__ == '__main__': 175 main()
运行结果
数据库
转载于:https://www.cnblogs.com/MC-Curry/p/9531908.html
爬虫_淘宝(selenium)相关推荐
- python淘宝爬虫_淘宝直播python爬虫
淘宝直播爬虫 直接上代码: # !/usr/bin/python # -*- coding: UTF-8 -*- import requests appKey = '12574478' def get ...
- 淘宝+Selenium
title: 淘宝+selenium categories: [爬虫笔记,代码] from selenium import webdriver from selenium.common.excepti ...
- 淘宝购物如何找优惠券_淘宝上买衣服怎么省钱
先领券,再下单.省钱不止一点点! 你购物,我掏钱.天猫淘宝任你选! 荐好友,领佣金.你省我省大家省! 加VX:sqgwkk 一省到底! 宝妈在家也能做兼职_淘宝购物如何找优惠券_淘宝上买衣服怎么省钱 ...
- Python爬虫_某宝网案例
Python爬虫_某宝网案例 一.导入第三方库,确定url,定义headers ,伪装爬虫代码 import requests url = 'https://s.taobao.com/search?q ...
- Python网络爬虫获取淘宝商品价格
1.Python网络爬虫获取淘宝商品价格代码: #-*-coding:utf-8-*- ''' Created on 2017年3月17日 @author: lavi ''' import reque ...
- 网络爬虫实战||淘宝、股票定向爬虫
正则表达式的概念 regular expression regex RE 正则表达式是用来简洁表达一组字符串的表达式. 正则表达式的优势:简洁 正则表达式的语法 ...
- 怎样在天猫超市买东西便宜_淘宝怎么便宜买东西
先领券,再下单.省钱不止一点点! 你购物,我掏钱.天猫淘宝任你选! 荐好友,领佣金.你省我省大家省! 加微信:sqgwkk.一省到底! 适合宝妈的兼职软件_怎样在天猫超市买东西便宜_淘宝怎么便宜买东西 ...
- 网络定向爬虫实例---淘宝商品信息比价
目录 一.前言: 二.前期准备: 1.如何绕过防爬虫 2.一些常见的问题及处理方法: 三.爬虫实例结构分析: 1.主体结构: 2.分析: (1)爬虫可行性: (2)网站数据结构 四.爬虫实例展示: 1 ...
- python爬虫淘宝登录_淘宝的模拟登录(python3+selenium)
淘宝登录 爬数据的前提是要先登录,那么先来说怎么使用python3+selenium登录淘宝的. 一.登录前的准备工作 关于一开始做登录时,一直会出现滑块,这个滑块怎么滑都通过不了,后来才知道是淘宝有 ...
- python爬虫淘宝和天猫的区别_荐真实难过,当python爬虫对上淘宝和天猫,我又失败了!...
我从来没想过淘宝天猫的反扒机制这么强,随着学习的推进,我用上了selenium,开始爬取这些网站,然后我输很彻底,下面我讲一下我失败的最后倔强! 果然学习不会顺水成舟,该碰壁还是得碰壁,我拿着18年的 ...
最新文章
- ASP.NET Core 2 学习笔记(七)路由
- 5行代码,快速实现图像分割,代码逐行详解,手把手教你处理图像 | 开源
- Map Set list 理解
- Leetcode 62.不同路径 (每日一题 20210701)
- python awk 读文件_测试python awk sed 读取文件指定位置时的性能
- UNIX再学习 -- TCP/UDP 客户机/服务器
- mac 10.10 apache php,在Mac上10分钟搞定Apache服务器配置
- c语言中如何取消最后一个空格,新人提问:如何将输出时每行最后一个空格删除...
- java中面向对象_java中的面向对象
- selectprovider 分页_修改EFOracleProvider——解决分页排序问题
- 服务器是怎样进行中断的,企业如何减少服务器中断风险
- SharePoint 2010 大局观(1~3)
- 华云数据入围2021新经济年度巅峰榜
- Wipro任命Thierry Delaporte为首席执行官兼董事总经理
- 更换电脑机械硬盘之后,无需重新安装程序技巧(系统盘为固态),解决D盘程序快捷方式图标白色方块
- The file Tomcat.exe was not found... Either the CATALINA_HOME environment variable is not defin
- 计算机网络月考题职专一年级,职高一年级计算机专业WORD试题
- wxpython入门(1)
- HTTP响应状态码及含义
- 前端/后端(FE / BE)