任务1:利用cookie可以免去登录的烦恼(验证码)

'''
只需要有登录后的cookie,就可以绕过验证码
登录后的cookie可以通过Selenium用第三方(微博)进行登录,不需要进行淘宝的滑动验证码
''' import requests
from urllib.parse import urlencode headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
# 登录后的cookie
'cookie': 'xxx',
} params = {
'q': 'iphone',
'imgfile':'',
'commend': 'all',
'ssid': 's5-e',
'search_type': 'item',
'sourceId': 'tb.index',
'spm': 'a21bo.2017.201856-taobao-item.2',
'ie': 'utf8',
'initiative_id': 'tbindexz_20170306',
} url = 'https://s.taobao.com/search?' + urlencode(params)
s = requests.Session()
response = s.get(url,headers=headers,verify=False).text
print(response)

 

任务2:爬取淘宝商品信息

from selenium import webdriver
# 通用选择
from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 超时
from selenium.common.exceptions import TimeoutException from lxml import etree import json
import random import time browser = webdriver.Chrome() browser.set_window_size(1400, 900) '''
爬到第19页的时候淘宝会弹窗,熟悉的滑动解锁= =,以后解决了这个滑动在继续吧
总体思路没问题
''' def taobao_login():
'''
淘宝的滑动验证码过不去,使用第三方登录
'''
'''
# 需要先登录
login = browser.find_element(By.ID,'J_Quick2Static').click()
username = browser.find_element(By.CSS_SELECTOR,'#TPL_username_1')
username.send_keys('XXX')
password = browser.find_element(By.CSS_SELECTOR,'#TPL_password_1')
password.send_keys('XXX')
button = browser.find_element(By.ID, 'J_SubmitStatic').click()
ActionChains(browser).move_by_offset(random.randint(10, 60), random.randint(10, 60)).perform()
# 判断大小
input2 = browser.find_element(By.ID,'nc_1__scale_text')
print(input2.size)
# 滑动验证码
action = ActionChains(browser)
source = browser.find_element(By.ID,'nc_1_n1z')
# 按住不放
action.click_and_hold(source).perform()
# 需要滑动的坐标
action.move_by_offset(298,0)
# 释放鼠标
action.release().perform()
''' def weibo_login():
'''
账号密码输入后有滑动验证码,滑动成功也无法登录,考虑绕过去,采用第三方登录 通过微博账号登录
'''
weibo_button = browser.find_element(By.CSS_SELECTOR, '.weibo-login')
weibo_button.click()
# 网速有点慢 需要先注册一个微博账号且绑定一个淘宝账号,真麻烦= =
# 多登录几次,微博就会弹出当前网络超时,请稍后再试(600002),需要等一段时间才能进去
time.sleep(2)
username = browser.find_element(By.NAME, 'username')
username.send_keys('账号')
time.sleep(1)
password = browser.find_element(By.NAME, 'password')
password.send_keys('密码')
browser.find_element(By.CSS_SELECTOR, '.W_btn_g').click() def index_page(page):
print('正在抓取第', page, '页')
try:
if page > 1:
# 等待直到页码输入框出现
input_box = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input')))
# 等待确定按钮可以被点击
submit = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit')))
input_box.clear()
input_box.send_keys(page)
submit.click()
# time.sleep(2)
# 等待直到跳转的页码等于高亮显示的页码,说明跳转成功
wait.until(
EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager li.item.active > span'), str(page)))
# 等待直到所有商品加载出来
wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item')))
# 爬取详细信息
# time.sleep(3)
get_products()
except TimeoutException:
# 超时就重试一次
index_page(page) def get_products():
html = etree.HTML(browser.page_source)
items = html.xpath('//div[@class="m-itemlist"]//div[@class="items"]/div')
for item in items:
product = {}
product['image'] = item.xpath('.//img/@data-src')
product['price'] = item.xpath('.//strong/text()')
product['title'] = item.xpath('.//img[@class="J_ItemPic img"]/@alt')
product['shop'] = item.xpath('.//a[@class="shopname J_MouseEneterLeave J_ShopInfo"]/span[2]/text()')
product['location'] = item.xpath('.//div[@class="location"]/text()')
print(product)
result = json.dumps(product, ensure_ascii=False) + ',\n'
with open('product.json', 'ab') as f:
f.write(result.encode('utf-8')) # print(browser.get_cookies())
# print(browser.page_source) wait = WebDriverWait(browser, 10)
MAX_PACE = 100 def main():
try:
browser.get('http://www.taobao.com')
print(browser.window_handles)
input = browser.find_element(By.ID, 'q')
# 搜索的信息
input.send_keys('iphone')
input.send_keys(Keys.ENTER)
browser.find_element(By.ID, 'J_Quick2Static').click()
time.sleep(1)
# 处理登录
weibo_login()
except:
main()
for i in range(1, MAX_PACE + 1):
index_page(i) if __name__ == '__main__':
main()

  

总结:

  1.学会利用cookie绕过验证码

  2.学会从第三方进入需要爬取的网站

  3.淘宝的滑动解锁(真的麻烦)

  4.通过selenium模拟点击,爬取网站,虽然只爬了20页,但是思路没问题

淘宝必杀:滑动三连

  

小知识:

import json
a = {"name":"123","age":123}
text = json.dumps(a,ensure_ascii=False) + ",\n" with open('1234.json','wb') as f:
f.write(text.encode('utf-8'))

  

<day003>登录+爬取淘宝商品信息+字典用json存储的更多相关文章

  1. 利用Selenium爬取淘宝商品信息

    一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一 ...

  2. 爬取淘宝商品信息,放到html页面展示

    爬取淘宝商品信息 import pymysql import requests import re def getHTMLText(url): kv = {'cookie':'thw=cn; hng= ...

  3. Selenium+Chrome/phantomJS模拟浏览器爬取淘宝商品信息

    #使用selenium+Carome/phantomJS模拟浏览器爬取淘宝商品信息 # 思路: # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表 # 第二步:分析商品页数,驱动浏 ...

  4. python3编写网络爬虫16-使用selenium 爬取淘宝商品信息

    一.使用selenium 模拟浏览器操作爬取淘宝商品信息 之前我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过A ...

  5. selenium+pyquery爬取淘宝商品信息

    import re from selenium import webdriver from selenium.common.exceptions import TimeoutException fro ...

  6. selenium+phantomjs+pyquery 爬取淘宝商品信息

    from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium ...

  7. Python 爬取淘宝商品信息和相应价格

    !只用于学习用途! plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html) :获得商品价格和view_pri ...

  8. Python 爬取淘宝商品数据挖掘分析实战

    Python 爬取淘宝商品数据挖掘分析实战 项目内容 本案例选择>> 商品类目:沙发: 数量:共100页  4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 爬取淘宝商品 ...

  9. python3爬取淘宝商品(失效)

    最近有人反映淘宝的搜索功能要登录才能用,原先的直接爬取的方法挂了.稍微把之前的代码修改了一下,登录采用最简单的复制cookie来解决. 顺便说一下,这只是根据搜索的的索引界面获取的信息,并未深入的获取 ...

随机推荐

  1. react使用阿里爸爸的iconfont时,不展示的问题

    选择使用Unicode时: 正常使用如下,显示也是正常: <i className="iconfont"></i> 使用map去循环时,需将原本的,改成 ...

  2. Go 转义字符

    Go 转义字符 package main import "fmt" func main() { fmt.Printf("Hello\tWorld!") } 本文 ...

  3. 压缩图片大小(Java源码)

    /** * * 直接指定压缩后的宽高: * @param oldFile * 要进行压缩的文件 * @param width * 压缩后的宽度 * @param height * 压缩后的高度 * @ ...

  4. JS For 循环详解;棋盘放粮食 64;冒泡排序实例

    FOR( 初始条件:循环条件:状态改变:) { 被执行的代码块} 初始条件: 在循环(代码块)开始前执行 循环条件:定义运行循环(代码块)的条件 状态改变: 在循环(代码块)已被执行之后执行 循环可以 ...

  5. XML文件定义约束

    今天在做Android项目的时候,用到了XML解析,服务端返回的不是JSON,而是XML,这时候就需要我们解析XML了,当然在解析XML的时候,需要了XML文件的定义结构,任何一个文件的定义都是要遵循 ...

  6. char*转LPCWSTR【转载】

    文章转载自https://blog.csdn.net/zhouxuguang236/article/details/8761497 通过MultiByteToWideChar函数转换 MultiByt ...

  7. hdu多校第九场 1005 (hdu6684) Rikka with Game 博弈

    题意: 给一个小写字母组成的字符串,每回合轮到某人时,此人可以选择让某位+1(如果是z则变回a),或者直接结束游戏. 先手希望游戏结束时字符串字典序尽量小,后手希望游戏结束时字符串字典序尽量大,求游戏 ...

  8. 2019 IEEEXtreme 13.0 题解记录

    比赛时间 2019.10.19 8:00 - 2019.10.20 8:00 比赛网站 https://csacademy.com/ieeextreme13 // 连续24小时做题真的是极限体验 // ...

  9. Day 9 :初识函数

    Python函数:1.函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 2.函数能提高应用的模块性,和代码的重复利用率. Python提供了许多内建函数,比如print().但你也可 ...

  10. 纯CSS3制作的“Ribbons”效果

    在看具体每个demo之前,我们一起来看下面一个截图: 上图是一个典型的“Ribbons”各部位的示意图,但每一个“Ribbons”并不会都使用上图示意的各个部分,在下面的实例中大家可以明显的看 到或者 ...