淘宝网站,页面上有很多动态加载的AJAX请求,并且很多参数做过加密处理,如果直接分析网页,会非常繁琐,难度极大。本文利用selenium驱动chrome浏览器完成关键字输入、搜索、点击等功能,完成页面的信息的获取,并利用pyquery库进行解析,获取商品信息并将信息存入mongodb。
selenium库的安装已经具体使用方法详见博客http://blog.csdn.net/qq_29186489/article/details/78661008,
关于mongodb的安装与配置,详见博客http://blog.csdn.net/qq_29186489/article/details/78546727,本文不再赘述。

抓取思路分析##

1:利用selenium驱动chrome浏览器进入淘宝网站,手工输入账号密码后,获取cookies,并存储到本地;在爬取程序运行时,从本地加载cookies,维持登录;
2:利用selenium驱动chrome浏览器进入淘宝网站,输入关键词“美食”,并点击搜索按钮,得到商品查询后的列表;
3:加载搜索结果页面完成后,分析页码,得到商品的页码数,模拟翻页,每次翻页,停止10-30秒的休眠时间,得到后续页面的商品列表;
4:利用pyquery解析页面,分析获取商品信息;
5:将获取到的商品信息存储到mongodb中,供后续分析使用。

编码实现

一:获取cookies,并存储到本地

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import json
browser=webdriver.Chrome()
browser.get("https://www.taobao.com")
input=browser.find_element_by_css_selector("#q")
input.send_keys("ipad")
button=browser.find_element_by_class_name("btn-search")
button.click()
#留下时间,扫描二维码登录
time.sleep(20)
#登录后,保存cookies到本地
dictCookies=browser.get_cookies()
jsonCookies=json.dumps(dictCookies)
with open("cookies.txt","w") as f:f.write(jsonCookies)browser.close()

二:加载cookies,运行爬虫程序,获取商品信息
1:引入相关类库

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re
from pyquery import PyQuery as pq
import pymongo
import random
import time

2:定义MONGO数据库的链接参数

MONGO_URL="LOCALHOST"
MONGO_DB="taobao"
MONGO_TABLE="product"
client=pymongo.MongoClient(MONGO_URL)
db=client[MONGO_DB]

3:加载cookies信息,并维持登录

#加载cookie,维持登录
def load_cookie(browser,file):browser.get("https://www.taobao.com")browser.maximize_window()browser.delete_all_cookies()# 读取登录时存储到本地的cookiewith open(file, 'r', encoding='utf-8') as f:listCookies = json.loads(f.read())for cookie in listCookies:browser.add_cookie(cookie)browser.refresh()return browser

3:搜索商品信息

#搜索商品信息
def search_html(browser):try:browser=load_cookie(browser,"cookies.txt")#等待搜索框加载并获取该元素input_element=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"#q")))#等待搜索按钮并获取该元素search_button=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"#J_TSearchForm > div.search-button > button")))#输入关键字 美食input_element.send_keys("美食")#点击搜索按钮search_button.click()page_total_num=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > div.total")))num=re.findall('共.*?(\d+).*?页',page_total_num.text,re.S)[0]#time.sleep(1000)return numexcept TimeoutException:return None

4:实现翻页功能

#实现翻页功能,由于淘宝的反抓取设置,翻页太快会被屏蔽,翻页时间设置为15秒每次
def next_page(page_num):try:#等待页码输入框加载成功,并获取该对象input_pagenum=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > div.form > input")))#等待翻页确定按钮加载成功,并获取该对象button_confirm=WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit")))#清空页码输入框input_pagenum.clear()#输入跳转的页码input_pagenum.send_keys(page_num)#点击页码跳转确认按钮button_confirm.click()#判断跳转后页面的页面是否和输入的一致WebDriverWait(browser,10).until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > ul > li.item.active > span"),str(page_num)))#每隔10-30秒随机事件翻页time.sleep(random.randint(10, 30))except TimeoutException:next_page(page_num)

5:解析网页代码,获取商品信息

#解析网页代码,获取商品信息
def get_products():#判断商品信息是否加载完成WebDriverWait(browser,10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"#mainsrp-itemlist .items .item")))#获取加载完成的网页代码html=browser.page_source#利用pyquery解析网页代码doc=pq(html)#获取所有的商品信息的列表items=doc("#mainsrp-itemlist .items .item").items()#遍历获取每个商品的信息for item in items:product={'image':item.find(".pic .img").attr("src"),'price':item.find(".price").text(),'deal':item.find(".deal-cnt").text()[:-3],'title':item.find(".title").text(),'shop':item.find(".shop").text(),'location':item.find(".location").text()}save_to_mongo(product)

6:将结果存储到mongodb中

def save_to_mongo(result):try:if db[MONGO_TABLE].insert(result):print("存储到mongodb成功",result)except Exception:print("存储到mongodb失败",result)

7:程序入口

try:browser = webdriver.Chrome()total_num=int(search_html(browser))for page_num in range(2,total_num+1):get_products(browser)next_page(page_num)
except:print("运行出错,请重试!")
finally:browser.close()

程序运行结果

控制台截图

数据库截图

程序完整代码下载地址

https://code.csdn.net/qq_29186489/taobaoproduct/tree/master/taobaoproduct.py

比价网站的基础-爬取淘宝的商品信息相关推荐

  1. 网络爬虫爬取淘宝页面商品信息

    网络爬虫爬取淘宝页面商品信息 最近在MOOC上看嵩老师的网络爬虫课程,按照老师的写法并不能进行爬取,遇到了一个问题,就是关于如何"绕开"淘宝登录界面,正确的爬取相关信息.通过百度找 ...

  2. python使用requests库爬取淘宝指定商品信息

    python使用requests库爬取淘宝指定商品信息 在搜索栏中输入商品 通过F12开发者工具抓包我们知道了商品信息的API,同时发现了商品数据都以json字符串的形式存储在返回的html内 解析u ...

  3. 用Python爬取淘宝网商品信息

    用Python爬取淘宝网商品信息 转载请注明出处 网购时经常会用到淘宝网 点我去淘宝但淘宝网上的商品琳琅满目,于是我参照中国大学 MOOC的代码写了一个爬取淘宝网商品信息的程序 代码如下: impor ...

  4. python +selenium 爬取淘宝网商品信息

    前几天用python爬取豆瓣关于电影<长城>的影评,发现豆瓣的网页是静态的,心中一阵窃喜.以为对于动态网页了解的不是太多.但是主要是用cookie加headers爬取的.效果还不错,爬取了 ...

  5. Python爬虫——4.6使用requests和正则表达式、随机代理爬取淘宝网商品信息

    # coding:utf-8 ''' 使用requests模块,使用代理,进行淘宝网商品信息的爬取 ''' # 引入需要的模块 import requests import random import ...

  6. Python爬虫模拟浏览器的headers、cookie,爬取淘宝网商品信息

    一. 淘宝商品信息定向爬虫 二. 爬虫基础:正则表达式 三. 淘宝页面查看与分析 四. 爬虫源码 一. 淘宝商品信息定向爬虫 注意淘宝的robots.txt不允许任何爬虫爬取,我们只在技术层面探讨这一 ...

  7. 【python爬虫】爬取淘宝网商品信息

    相信学了python爬虫,很多人都想爬取一些数据量比较大的网站,淘宝网就是一个很好的目标,其数据量大,而且种类繁多,而且难度不是很大,很适合初级学者进行爬取.下面是整个爬取过程: 第一步:构建访问的u ...

  8. 简单使用Python爬虫爬取淘宝网页商品信息

    最近在学习爬虫,本人还是入门级的小白,自己跟着老师写了一些代码,算是自己的总结,还有一些心得,跟大家分享一下,如果不当,还请各位前辈斧正. 这是代码: # 导入库 import requests im ...

  9. 爬虫(6)-使用selenium爬取淘宝天猫商品信息(价格,销售量等)

    文章目录 1.只读取第一页 1.1准备工作 1.2.定位 1.3.获取商品信息 1.4. 整体代码 1.5.输出结果展示 1.6改进,存储在CSV文件内并分行存储 2.读取多页商品信息 2.1部分问题 ...

最新文章

  1. EasyBridge:一种简单的js-bridge设计方案
  2. 将用bootstrap框架的html文件转为eclipse中jsp文件
  3. 关于很多人 年底被炒!
  4. php计算购置税1007无标题,新旧个税计算公式对比–ps:世界上最好的语言PHP
  5. ApacheCN 大数据译文集 20211206 更新
  6. 【推荐实践】智能推荐算法在直播场景中的应用
  7. SoapUI 入门指南
  8. 遗传算法原理及其python实现
  9. C++ 结构体内存对齐
  10. html禁止查看图片,强看被屏蔽微信朋友圈
  11. Windows常用快捷键和常用的cmd命令(亲测用了办公效率提升明显)
  12. CAD 绘图如何有效的控制精度?
  13. Git对G码云上项目的上传及同步
  14. 基于锚点定位和overflow的选项卡
  15. ZOJ3551 Bloodsucker(概率dp)
  16. 会php学java入门要多久_php自学需要多久
  17. 网站转化率与漏斗模型
  18. 转发:任正非寄语2010:开放、妥协与灰度
  19. JAVA中反射是什么?
  20. 深入理解 AuthenticationManagerBuilder 【源码篇】

热门文章

  1. 冷冲压工艺缺陷及处理办法,常见产品展开工艺技术归纳
  2. 商用密码算法的实现(常见的密码算法库)
  3. 由于CMake版本过高Invalid revision: 3.18.1-g262b901-dirty
  4. OSChina 周五乱弹 —— 书生夜宿鬼宅
  5. 安徽对口计算机专业课,安徽对口升学计算机类考试时间
  6. gba模拟器 linux,在Ubuntu上运行GBA模拟器
  7. Windows XP系统瘦身优化加速
  8. 周期性行业是什么意思_什么是周期性行业及周期性股票
  9. 你的服务器没有正确响应Token验证的解决方法
  10. 程序数据在内存中如何储存