总体来说代码还不是太完美

实现了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)相关推荐

  1. python淘宝爬虫_淘宝直播python爬虫

    淘宝直播爬虫 直接上代码: # !/usr/bin/python # -*- coding: UTF-8 -*- import requests appKey = '12574478' def get ...

  2. 淘宝+Selenium

    title: 淘宝+selenium categories: [爬虫笔记,代码] from selenium import webdriver from selenium.common.excepti ...

  3. 淘宝购物如何找优惠券_淘宝上买衣服怎么省钱

    先领券,再下单.省钱不止一点点! 你购物,我掏钱.天猫淘宝任你选! 荐好友,领佣金.你省我省大家省! 加VX:sqgwkk  一省到底! 宝妈在家也能做兼职_淘宝购物如何找优惠券_淘宝上买衣服怎么省钱 ...

  4. Python爬虫_某宝网案例

    Python爬虫_某宝网案例 一.导入第三方库,确定url,定义headers ,伪装爬虫代码 import requests url = 'https://s.taobao.com/search?q ...

  5. Python网络爬虫获取淘宝商品价格

    1.Python网络爬虫获取淘宝商品价格代码: #-*-coding:utf-8-*- ''' Created on 2017年3月17日 @author: lavi ''' import reque ...

  6. 网络爬虫实战||淘宝、股票定向爬虫

    正则表达式的概念 regular expression           regex          RE 正则表达式是用来简洁表达一组字符串的表达式. 正则表达式的优势:简洁 正则表达式的语法 ...

  7. 怎样在天猫超市买东西便宜_淘宝怎么便宜买东西

    先领券,再下单.省钱不止一点点! 你购物,我掏钱.天猫淘宝任你选! 荐好友,领佣金.你省我省大家省! 加微信:sqgwkk.一省到底! 适合宝妈的兼职软件_怎样在天猫超市买东西便宜_淘宝怎么便宜买东西 ...

  8. 网络定向爬虫实例---淘宝商品信息比价

    目录 一.前言: 二.前期准备: 1.如何绕过防爬虫 2.一些常见的问题及处理方法: 三.爬虫实例结构分析: 1.主体结构: 2.分析: (1)爬虫可行性: (2)网站数据结构 四.爬虫实例展示: 1 ...

  9. python爬虫淘宝登录_淘宝的模拟登录(python3+selenium)

    淘宝登录 爬数据的前提是要先登录,那么先来说怎么使用python3+selenium登录淘宝的. 一.登录前的准备工作 关于一开始做登录时,一直会出现滑块,这个滑块怎么滑都通过不了,后来才知道是淘宝有 ...

  10. python爬虫淘宝和天猫的区别_荐真实难过,当python爬虫对上淘宝和天猫,我又失败了!...

    我从来没想过淘宝天猫的反扒机制这么强,随着学习的推进,我用上了selenium,开始爬取这些网站,然后我输很彻底,下面我讲一下我失败的最后倔强! 果然学习不会顺水成舟,该碰壁还是得碰壁,我拿着18年的 ...

最新文章

  1. ASP.NET Core 2 学习笔记(七)路由
  2. 5行代码,快速实现图像分割,代码逐行详解,手把手教你处理图像 | 开源
  3. Map Set list 理解
  4. Leetcode 62.不同路径 (每日一题 20210701)
  5. python awk 读文件_测试python awk sed 读取文件指定位置时的性能
  6. UNIX再学习 -- TCP/UDP 客户机/服务器
  7. mac 10.10 apache php,在Mac上10分钟搞定Apache服务器配置
  8. c语言中如何取消最后一个空格,新人提问:如何将输出时每行最后一个空格删除...
  9. java中面向对象_java中的面向对象
  10. selectprovider 分页_修改EFOracleProvider——解决分页排序问题
  11. 服务器是怎样进行中断的,企业如何减少服务器中断风险
  12. SharePoint 2010 大局观(1~3)
  13. 华云数据入围2021新经济年度巅峰榜
  14. Wipro任命Thierry Delaporte为首席执行官兼董事总经理
  15. 更换电脑机械硬盘之后,无需重新安装程序技巧(系统盘为固态),解决D盘程序快捷方式图标白色方块
  16. The file Tomcat.exe was not found... Either the CATALINA_HOME environment variable is not defin
  17. 计算机网络月考题职专一年级,职高一年级计算机专业WORD试题
  18. wxpython入门(1)
  19. HTTP响应状态码及含义
  20. 前端/后端(FE / BE)

热门文章

  1. 20165212四则运算2
  2. iOS 解决导航栏左右 BarButtonItem偏移位置的问题
  3. python 学习笔记7(装饰器)
  4. InfluxDB、grafana、collect部署监控(centos6.8)
  5. iOS开发 利用Reachability判断网络环境
  6. Android模拟器的模拟键盘区不见了怎么办
  7. Sublime Text各种插件使用方法
  8. Android之ListView/GridView 优化
  9. Xcode 6 的新增特性
  10. EXTASP.Net几天使用总结