用selenium爬取淘寶美食

這里用淘寶來練習(xí)一下 selenium 的使用,可以替換關(guān)鍵字,爬取不同的物品,比如說衣服、鞋子之類的。


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from pyquery import PyQuery as pq
import re,pymongo

borwser = webdriver.Chrome()#聲明瀏覽器
url = 'https://www.taobao.com/'
wait = WebDriverWait(borwser,10)#顯示等待
key_word = '美食'
def search(key_word):
    try:
        borwser.get(url)
        input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#q')))
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_TSearchForm>div.search-button>button')))
        input.send_keys(key_word)
        submit.click()
        total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager>div>div>div>div.total')))
        get_products()
        return total.text
    except TimeoutError:
        return search(key_word)

這一部分主要是一些配置的信息,打開淘寶,找到輸入框,然后輸入關(guān)鍵字確定,如果在規(guī)定的時(shí)間內(nèi)沒有響應(yīng),可能是網(wǎng)速太慢,我們用了遞歸調(diào)用再次執(zhí)行代碼就好了。

def next_page(number):
    #處理翻頁(yè)的操作
    #頁(yè)面最下方翻頁(yè)地方輸入頁(yè)碼的框出來沒有
    input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager>div>div>div>div.form>input')))
    ##判斷輸入框后面的確定按鈕出來沒有
    submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager>div>div>div>div.form>span.btn.J_Submit')))
    input.clear()#先清理一下輸入框里的頁(yè)碼數(shù)字
    input.send_keys(number)#填入翻頁(yè)數(shù)字
    submit.click()#點(diǎn)擊確定
    #判斷是否翻頁(yè)成功
    wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager>div > div > div > ul > li.item.active > span'),str(number)))
    get_products()

這一部分是處理翻頁(yè)的,代碼注釋已經(jīng)很詳細(xì)了,不再過多啰嗦。

def get_products():
    #解析詳情列表
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-itemlist .items .item')))#看看頁(yè)面加載出來沒有
    html = borwser.page_source#得到網(wǎng)頁(yè)的源代碼
    doc = pq(html)#用pq解析網(wǎng)頁(yè)源代碼
    #得到所有選中的內(nèi)容
    items = doc('#mainsrp-itemlist .items .item').items()
    for item in items:
        products = {
            'image': item.find('.pic .img').attr('data-src'),
            'price': item.find('.price').text()[3:],
            'deal': item.find('.deal-cnt').text(),
            'title': item.find('.title').text(),
            'shop': item.find('.shop').text(),
            'location': item.find('.location').text()
        }
        print(products)
        save_products(products)

這里是解析頁(yè)面美食部分的代碼,當(dāng)然你的關(guān)鍵字是什么就解析什么,這里用到了 pyquery 這個(gè)庫(kù),你也可以使用其他的解析方法,比如說 xpath 、re 、bs4 等等

MONGO_URL = 'localhost'#本地?cái)?shù)據(jù)庫(kù)
MONGO_DB = 'taobaomeishi'#數(shù)據(jù)庫(kù)名稱
MONGO_TABLE = 'products'
client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]

def save_products(result):
    try:
        if db[MONGO_TABLE].insert(result):
            print('保存MONGODB成功',result)
    except Exception:
        print('保存到MONGODB失敗',result)



if __name__ == '__main__':
    total = search(key_word)
    total = int(re.findall('(\d+)',total)[0])
    for i in range(2,5):
        next_page(i)

覺得不錯(cuò)點(diǎn)個(gè)贊吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇文章在介紹官網(wǎng)的同時(shí)使用了比較多的腳本示例,示例里遇到的問題有部分在本篇文章進(jìn)行了解釋,還有一篇文章專門記錄了...
    顧顧314閱讀 13,086評(píng)論 3 32
  • 本文是我接觸爬蟲以來,第三套爬蟲的代碼記錄博客。本文主要是記錄淘寶搜索美食的頁(yè)面信息,工具是selenium 和 ...
    小白猿閱讀 1,159評(píng)論 1 9
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,205評(píng)論 3 119
  • 是誰(shuí)在遠(yuǎn)方呼喊 是誰(shuí)丟棄了昨天 是誰(shuí)不敢再愛了 是誰(shuí)變得沒了模樣 昨夜的星光美好 今晨的陽(yáng)光照在臉龐 閉上眼睛深吸...
    皆非_lx閱讀 184評(píng)論 0 4

友情鏈接更多精彩內(nèi)容