python按综合、销量排序抓取100页的淘宝商品列表信息

进入淘宝网,分别按综合、销量排序抓取100页的所有商品的列表信息。

1、按综合

import re
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
from pyquery import PyQuery as pq #获取整个网页的源代码 

from config import * #可引用congif的所有变量
import pymongo
import pymysql 

# client=pymongo.MongoClient(MONGO_URL)
# db = client[MONGO_DB] 

# 按综合排序 100页 

# 打开淘宝链接,输入‘美食',搜索
# 自动翻页:先得到总页数,再转到 _ 页,确定
# 

# browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)
# browser =webdriver.Chrome()
browser = webdriver.Firefox()
wait = WebDriverWait(browser,10) 

def search():
 print('正在搜索...')
 try:
  browser.get('https://www.taobao.com') #用这个网页'https://s.taobao.com',无法输入keywords
  input=wait.until(
    EC.presence_of_element_located((By.CSS_SELECTOR,'#q')) #打开淘宝,右击查看元素,定位到搜索框,选择对应代码,复制-CSS选择器,其实就是‘#q'。
  )
  submit=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_TSearchForm > div.search-button > button')))
  input.send_keys(KEYWORD) #模拟操作,输入内容
  submit.click() #点击提交
  total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.total'))) #页数
  return total.text
 except TimeoutException :
  return search() 

# 翻页
def next_page(page_number):
 print('正在翻页',page_number)
 try:
  input = wait.until(
   # 输入框
   EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')) # 打开淘宝,右击查看元素,定位到搜索框,选择对应代码,复制-CSS选择器,其实就是‘#q'。
  )
  # 搜索按钮
  submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit'))) #未修改
  input.clear()
  input.send_keys(page_number) # 模拟操作,输入页码
  submit.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)))
  get_products()
 except TimeoutException :
  next_page(page_number) 

# 解析,获取每页的商品并输出
def get_products():
 wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#mainsrp-itemlist .items .item'))) #加载所有宝贝
 html=browser.page_source
 doc = pq(html)
 items = doc('#mainsrp-itemlist .items .item').items()
 for item in items:
  product = {
   # 'picture':item.find('.pic .img').attr('src'),#用find去获取内部元素,选择器是 pic,img,用attr获取属性
   'image': item.find('.pic .img').attr('data-src'), # 用find去获取内部元素,选择器是 pic,img,用attr获取属性
   'shop_id': item.find('.shop').find('a').attr('data-userid'), # 店铺 id
   'data_id': item.find('.shop').find('a').attr('data-nid'), # 商品 id
   'link': item.find('.pic-box-inner').find('.pic').find('a').attr['href'],
   'price':item.find('.price').text()[1:-3], # 用text获取内容
   'deal':item.find('.deal-cnt').text()[:-3],
   'title':item.find('.title').text().replace(' ',''),
   'shop':item.find('.shop').text(),
   'location':item.find('.location').text()
  }
  # print(product)
  # print(product['location'])
  save_to_mysql(product)
'''''
def main():
 try:
  # search()
  total=search() # 此时 total = ‘共 100 页,'
  total=int(re.compile('(\d+)').search(total).group(1)) # 用正则表达式提取数字100
  # print(total)
  for i in range(2,total+1):
   next_page(i)
 except Exception:
  print('出错啦')
 finally: # 不管有没有异常,都要执行此操作
  browser.close() # 关浏览器
''' 

def main():
 total=search()
 total=int(re.compile('(\d+)').search(total).group(1))
 for i in range(2,total+1):
  next_page(i)#显示当前爬取网页的页数
  print ('搞定%d'%i) 

def save_to_mysql(product):
 # print(product['location'])
 #,use_unicode = False
 try:
  conn = pymysql.connect(host='localhost', user='root', passwd=' ', db='test1', port=3306,charset='utf8' )
  cur = conn.cursor() # 创建一个游标对象
  sql = """INSERT INTO women_clothes_zonghe VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
  cur.execute(sql, (product['shop_id'],product['shop'], product['link'],product['data_id'], product['title'], product['price'], product['location'],product['deal'],product['image']))
  # cur.execute(sql)
  print('- - - - - 数据保存成功 - - - - -')
  cur.close()
  conn.commit()
  conn.close() # 关闭数据
 except pymysql.Error as e:
  print(e) 

if __name__=='__main__':
 # 连接数据库
 conn = pymysql.connect(host='localhost', user='root', passwd=' ', db='test1', port=3306,charset="utf8")
 cur = conn.cursor() # 创建一个游标对象
 cur.execute("DROP TABLE IF EXISTS women_clothes_zonghe") # 如果表存在则删除
 # 创建表sql语句
 sqlc = """CREATE TABLE women_clothes_zonghe(
  shop_id VARCHAR(500),
  shop VARCHAR(500),
  link VARCHAR(1000),
  data_id varchar(100),
  title VARCHAR(1000),
  price VARCHAR(500),
  location VARCHAR(500),
  deal VARCHAR(500),
  image VARCHAR(1000)
 )"""
 cur.execute(sqlc) # 执行创建数据表操作
 main()

2、按销量

import re 

from bs4 import BeautifulSoup
from pyquery import PyQuery as pq #获取整个网页的源代码 

from config import * #可引用congif的所有变量
import pymongo
import pymysql 

import urllib
import requests
import json
import bs4 

from selenium import webdriver
from pyquery import PyQuery as pq #获取整个网页的源代码 

# 完整爬取所有页面的商品信息 共100页 按销量排序 

browser = webdriver.Firefox()
wait = WebDriverWait(browser,10) 

def get_url(keyword):
 url_str = urllib.parse.quote(keyword)
 i = 0
 for j in range(100):
  yield{
   'url':('https://s.taobao.com/search?q={}&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm='
   'a21bo.50862.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170808&sort=sale-desc&bcoffset=0&p4ppushleft=%2C44&s={}').format(url_str,i)
  }
  i+=44 

# 可行
def get_products(url):
 browser.get(url)
 wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#mainsrp-itemlist .items .item'))) #加载所有宝贝
 html=browser.page_source
 doc = pq(html)
 # print(doc)
 items = doc('#mainsrp-itemlist .items .item').items()
 for item in items:
  product = {
   # 获取 image 时,用'src'总有部分图片获取不到,因为淘宝设有'data-src' 和'src',不同商品这两个属性的前后顺序不一样,直接用'data-src'可避免返回 None
   'image':item.find('.pic .img').attr('data-src'),#用find去获取内部元素,选择器是 pic,img,用attr获取属性
   # 'image':item.find('.pic-box-inner').find('.pic').find('img').attr['src'],
   'price':item.find('.price').text()[1:-3], # 用text获取内容
   'shop_id': item.find('.shop').find('a').attr('data-userid'), # 店铺 id
   'data_id': item.find('.shop').find('a').attr('data-nid'), # 商品 id
   'link': item.find('.pic-box-inner').find('.pic').find('a').attr['href'],
   'deal':item.find('.deal-cnt').text()[:-3],
   'title':item.find('.title').text(),
   'shop':item.find('.shop').text(),
   'location':item.find('.location').text().replace(' ','')
  }
  # print(product)
  save_to_mysql(product) 

def save_to_mysql(product):
 try:
  conn = pymysql.connect(host='localhost',user='root',passwd=' ',port=3306,db='test1',charset='utf8')
  cur = conn.cursor()
  sql = "insert into women_clothes_sales2 values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"
  cur.execute(sql,(product['shop_id'],product['shop'],product['link'],product['data_id'],product['title'],product['price'],product['location'],product['deal'],product['image']))
  print('- - - 数据保存成功 - - - ')
  cur.close()
  conn.commit()
  conn.close()
 except pymysql.Error as e:
  print(e) 

def main():
 keyword = '女装'
 links = get_url(keyword) # 字典
 # 获取每页的 url
 for link in links:
  # print(link)
  url = link['url']
  #解析页面
  # soup = get_html(url)
  # print(soup)
  # get_detail(soup,url)
  get_products(url) 

if __name__=='__main__':
 conn = pymysql.connect(host='localhost',user = 'root',passwd=' ',db='test1',port = 3306,charset='utf8')
 cur = conn.cursor()
 cur.execute('Drop table if exists women_clothes_sales2')
 sqlc = "create table women_clothes_sales2(shop_id varchar(100),shop varchar(500),link varchar(1000),data_id varchar(100),title varchar(500),price varchar(200),location varchar(100),deal varchar(100),image varchar(1000))"
 cur.execute(sqlc)
 cur.close()
 conn.commit()
 conn.close()
 main() 

更多内容请参考专题《python爬取功能汇总》进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Python使用Selenium+BeautifulSoup爬取淘宝搜索页
  • python3爬取各类天气信息
  • 使用Python爬取最好大学网大学排名
  • python爬虫爬取淘宝商品信息
  • python3爬取淘宝信息代码分析
  • Python如何抓取天猫商品详细信息及交易记录
  • Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
  • Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
  • python抓取网页中链接的静态图片
  • 学习Python selenium自动化网页抓取器
时间: 2018-02-22

python抓取网页中链接的静态图片

本文实例为大家分享了python抓取网页中链接的静态图片的具体代码,供大家参考,具体内容如下 # -*- coding:utf-8 -*- #http://tieba.baidu.com/p/2460150866 #抓取图片地址 from bs4 import BeautifulSoup import urllib.request from time import sleep html_doc = "http://tieba.baidu.com/p/2460150866" def ge

学习Python selenium自动化网页抓取器

直接入正题---Python selenium自动控制浏览器对网页的数据进行抓取,其中包含按钮点击.跳转页面.搜索框的输入.页面的价值数据存储.mongodb自动id标识等等等. 1.首先介绍一下 Python selenium ---自动化测试工具,用来控制浏览器来对网页的操作,在爬虫中与BeautifulSoup结合那就是天衣无缝,除去国外的一些变态的验证网页,对于图片验证码我有自己写的破解图片验证码的源代码,成功率在85%. 详情请咨询QQ群--607021567(这不算广告,群里有好多P

python3爬取淘宝信息代码分析

# encoding:utf-8 import re # 使用正则 匹配想要的数据 import requests # 使用requests得到网页源码 这个函数是用来得到源码 # 得到主函数传入的链接 def getHtmlText(url): try: # 异常处理 # 得到你传入的URL链接 设置超时时间3秒 r = requests.get(url, timeout=3) # 判断它的http状态码 r.raise_for_status() # 设置它的编码 encoding是设置它的头

Python使用Selenium+BeautifulSoup爬取淘宝搜索页

使用Selenium驱动chrome页面,获得淘宝信息并用BeautifulSoup分析得到结果. 使用Selenium时注意页面的加载判断,以及加载超时的异常处理. import json import re from bs4 import BeautifulSoup from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.com

python爬虫爬取淘宝商品信息

本文实例为大家分享了python爬取淘宝商品的具体代码,供大家参考,具体内容如下 import requests as req import re def getHTMLText(url): try: r = req.get(url, timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def parasePage(ilt, html): tr

使用Python爬取最好大学网大学排名

本文实例为大家分享了Python爬取最好大学网大学排名的具体代码,供大家参考,具体内容如下 源代码: #-*-coding:utf-8-*- ''''' Created on 2017年3月17日 @author: lavi ''' import requests from bs4 import BeautifulSoup import bs4 def getHTMLText(url): try: r = requests.get(url) r.raise_for_status r.encodi

Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

1.引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor.本文记录了确定gsExtractor的技术路线过程中所做的编程实验.这是第二部分,第一部分实验了用xslt方式一次性提取静态网页内容并转换成xml格式.留下了一个问题:javascript管理的动态内容怎样提取?那么本文就回答这个问题. 2.提取动态内容的技术部件 在上一篇python使用xslt提取网页数据中,要提取的内容是直接从网页的source code里拿到的.但是一些Aja

Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 #!/user/bin/python # -*- coding: gbk -*- #Spider.py import urllib2 import httplib import StringIO import gzip import re import chardet import sys import os import datetime from xml.dom.minidom import Documen

Python如何抓取天猫商品详细信息及交易记录

本文实例为大家分享了Python抓取天猫商品详细信息及交易记录的具体代码,供大家参考,具体内容如下 一.搭建Python环境 本帖使用的是Python 2.7 涉及到的模块:spynner, scrapy, bs4, pymmssql 二.要获取的天猫数据 三.数据抓取流程 四.源代码 #coding:utf-8 import spynner from scrapy.selector import Selector from bs4 import BeautifulSoup import ran

python3爬取各类天气信息

本来是想从网上找找有没有现成的爬取空气质量状况和天气情况的爬虫程序,结果找了一会儿感觉还是自己写一个吧. 主要是爬取北京包括北京周边省会城市的空气质量数据和天气数据. 过程中出现了一个错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 250. 原来发现是页面的编码是gbk,把语句改成data=urllib.request.urlopen(url).read().decode("gbk")就可以

python爬取哈尔滨天气信息

本文实例为大家分享了python爬取哈尔滨天气信息的具体代码,供大家参考,具体内容如下 环境: windows7 python3.4(pip install requests:pip install BeautifulSoup4) 代码: (亲测可以正确执行) # coding:utf-8 """ 总结一下,从网页上抓取内容大致分3步: 1.模拟浏览器访问,获取html源代码 2.通过正则匹配,获取指定标签中的内容 3.将获取到的内容写到文件中 ""&qu

Python爬虫实现的根据分类爬取豆瓣电影信息功能示例

本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口: if __name__ == '__main__': main() #! /usr/bin/python3 # -*- coding:utf-8 -*- # author:Sirius.Zhao import json from urllib.parse import quote from urllib.request import urlopen from urllib.reque

Python爬取豆瓣视频信息代码实例

这篇文章主要介绍了Python爬取豆瓣视频信息代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 这里是爬取豆瓣视频信息,用pyquery库(jquery的python库). 一:代码 from urllib.request import quotefrom pyquery import PyQuery as pqimport requestsimport pandas as pddef get_text_page (movie_name)

Python3爬取英雄联盟英雄皮肤大图实例代码

爬虫思路 初步尝试 我先查看了network,并没有发现有可用的API:然后又用bs4去分析英雄列表页,但是请求到html里面,并没有英雄列表,在英雄列表的节点上,只有"正在加载中"这样的字样:同样的方法,分析英雄详情也是这种情况,所以我猜测,这些数据应该是Javascript负责加载的. 继续尝试 然后我就查看了 英雄列表的源代码 ,查看外部引入的js文件,以及行内的js脚本,大概在368行,发现了有处理英雄列表的js注释,然后继续往下读这些代码,发现了第一个彩蛋,也就是他引入了一个

Python爬取附近餐馆信息代码示例

本代码主要实现抓取大众点评网中关村附近的餐馆有哪些,具体如下: import urllib.request import re def fetchFood(url): # 模拟使用浏览器浏览大众点评的方式浏览大众点评 headers = {'User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'} ope

python登录并爬取淘宝信息代码示例

本文主要分享关于python登录并爬取淘宝信息的相关代码,还是挺不错的,大家可以了解下. #!/usr/bin/env python # -*- coding:utf-8 -*- from selenium import webdriver import time import datetime import traceback import logging import os from selenium.webdriver.common.action_chains import ActionC

解决Python3 抓取微信账单信息问题

这段时间有个朋友想导出微信里面的账单信息,后来发现微信的反爬虫还是很厉害的,花了点时间去分析. 一.采用传统模拟http抓取 抓取的主要URL:https://wx.tenpay.com/userroll/userrolllist,其中后面带上三个参数,具体参数见代码,其中exportkey这参数是会过期的,userroll_encryption和userroll_pass_ticket 这两个参数需要从cookie中获得,应该是作为获取数据的标识,通过抓包也看不出端倪,应该是微信程序内部生成的

正则爬取京东商品信息并打包成.exe可执行程序

本文爬取内容,输入要搜索的关键字可自动爬取京东网站上相关商品的店铺名称,商品名称,价格,爬取100页(共100页) 代码如下: import requests import re # 请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' } def get_all(ur