中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python按綜合、銷量排序抓取100頁的淘寶商品列表信息

發布時間:2020-10-12 03:22:02 來源:腳本之家 閱讀:229 作者:sisteryaya 欄目:開發技術

進入淘寶網,分別按綜合、銷量排序抓取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爬取功能匯總》進行學習。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

普兰县| 永泰县| 武邑县| 彭泽县| 元谋县| 吉林市| 三明市| 嘉兴市| 宜阳县| 阳朔县| 临沭县| 平阴县| 贵德县| 舞钢市| 甘谷县| 临颍县| 西贡区| 甘孜| 灌云县| 新干县| 卢氏县| 普宁市| 本溪| 沙湾县| 仁怀市| 华坪县| 秦皇岛市| 台中县| 遂宁市| 海口市| 嵊泗县| 集贤县| 三原县| 博爱县| 唐山市| 得荣县| 肥城市| 崇信县| 宝清县| 措美县| 乌鲁木齐县|