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爬虫爬取淘宝商品信息

本文实例为大家分享了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爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

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

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

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使用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

python3爬取各类天气信息

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

使用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 爬取学信网登录页面的例子

我们以学信网为例爬取个人信息 **如果看不清楚 按照以下步骤:** 1.火狐为例 打开需要登录的网页–> F12 开发者模式 (鼠标右击,点击检查元素)–点击网络 –>需要登录的页面登录下–> 点击网络找到 一个POST提交的链接点击–>找到post(注意该post中信息就是我们提交时需要构造的表单信息) import requests from bs4 import BeautifulSoup from http import cookies import urllib impo

python爬取”顶点小说网“《纯阳剑尊》的示例代码

爬取"顶点小说网"<纯阳剑尊> 代码 import requests from bs4 import BeautifulSoup # 反爬 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, \ like Gecko) Chrome/70.0.3538.102 Safari/537.36' } # 获得请求 def open_url(url):

利用python爬取散文网的文章实例教程

本文主要给大家介绍的是关于python爬取散文网文章的相关内容,分享出来供大家参考学习,下面一起来看看详细的介绍: 效果图如下: 配置python 2.7 bs4 requests 安装 用pip进行安装 sudo pip install bs4 sudo pip install requests 简要说明一下bs4的使用因为是爬取网页 所以就介绍find 跟find_all find跟find_all的不同在于返回的东西不同 find返回的是匹配到的第一个标签及标签里的内容 find_all返

python爬取网易云音乐评论

本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comments(res): comments_json = json.loads(res.text) hot_comments = comments_json['hotComments'] with open("hotcmments.txt", 'w', encoding = 'utf-8') a

Python爬虫爬取煎蛋网图片代码实例

这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: urllib.request os 分别使用几个函数,来控制下载的图片的页数,获取图片的网页,获取网页页数以及保存图片到本地.过程简单清晰明了 直接上源代码: import urllib.request import os def url_open(url): req = urllib.reques

python爬取网易云音乐热歌榜实例代码

首先找到要下载的歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更改你要保存的目录,目录要先建立好文件夹,例如我的是保存在D盘-360下载-网易云热歌榜文件夹内,就可以完成下载. 如果文件夹没有提前建好,会报错[Errno 2] No such file or directory. 代码实现: from urllib import request from bs4 import BeautifulSoup i

python爬取m3u8连接的视频

本文为大家分享了python爬取m3u8连接的视频方法,供大家参考,具体内容如下 要求:输入m3u8所在url,且ts视频与其在同一路径下 #!/usr/bin/env/python #_*_coding:utf-8_*_ #Data:17-10-08 #Auther:苏莫 #Link:http://blog.csdn.net/lingluofengzang #PythonVersion:python2.7 #filename:download_movie.py import os import

python爬取安居客二手房网站数据(实例讲解)

是小打小闹 哈哈,现在开始正式进行爬虫书写首先,需要分析一下要爬取的网站的结构:作为一名河南的学生,那就看看郑州的二手房信息吧! 在上面这个页面中,我们可以看到一条条的房源信息,从中我们发现了什么,发现了连郑州的二手房都是这么的贵,作为即将毕业的学生狗惹不起啊惹不起 还是正文吧!!!由上可以看到网页一条条的房源信息,点击进去后就会发现: 房源的详细信息.OK!那么我们要干嘛呢,就是把郑州这个地区的二手房房源信息都能拿到手,可以保存到数据库中,用来干嘛呢,作为一个地理人,还是有点用处的,这次就不说

Python爬取三国演义的实现方法

本文的爬虫教程分为四部: 1.从哪爬 where 2.爬什么 what 3.怎么爬 how 4.爬了之后信息如何保存 save 一.从哪爬 三国演义 二.爬什么 三国演义全文 三.怎么爬 在Chrome页面打开F12,就可以发现文章内容在节点 <div id="con" class="bookyuanjiao"> 只要找到这个节点,然后把内容写入到一个html文件即可. content = soup.find("div", {&quo