欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用Selenium+BeautifulSoup爬取淘寶搜索頁

 更新時間:2018年02月24日 11:34:48   作者:emmm又餓了  
這篇文章主要為大家詳細(xì)介紹了Python使用Selenium+BeautifulSoup爬取淘寶搜索頁,具有一定的參考價值,感興趣的小伙伴們可以參考一下

使用Selenium驅(qū)動chrome頁面,獲得淘寶信息并用BeautifulSoup分析得到結(jié)果。

使用Selenium時注意頁面的加載判斷,以及加載超時的異常處理。

import json
import re
from bs4 import BeautifulSoup
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

browser = webdriver.Chrome()
# 瀏覽器需要多次使用,所以單獨(dú)拿出來。設(shè)置一個最長的等待時間,等待目標(biāo)加載完成
wait = WebDriverWait(browser, 10)


def search(keyword):
 # wait容易出現(xiàn)加載時間長的問題,因此用try來捕捉異常
 try:
 browser.get('https://www.taobao.com')
 # 加載需要一定時間的,設(shè)置了等待時間,等待加載
 # 輸入按鈕的加載等待
 input = wait.until(
  # 設(shè)置加載目標(biāo),它是一個選擇器,參數(shù)是需要選擇方式和等待加載的內(nèi)容
  EC.presence_of_element_located((By.CSS_SELECTOR, "#q")) # 選擇CSS選擇器和選擇內(nèi)容
 )
 # 提交按鈕
 submit = wait.until(
  # EC后面是選擇條件,按鈕的加載條件最好的是element_to_be_clickable,意思為元素可以點(diǎn)擊的
  EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_TSearchForm > div.search-button > button"))
 )
 input.send_keys(keyword) # send_keys對輸入框輸入內(nèi)容
 submit.click() # 提交搜索內(nèi)容,進(jìn)入下一個頁面
 # 等待頁碼元素加載完成,并返回最大頁碼數(shù)
 total = wait.until(
  EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.total"))
 )
 # 等待加載完成后獲取信息
 get_products()
 return total.text
 except TimeoutException:
 # 超時后重新請求,因此遞歸調(diào)用
 return search()


def next_page(page_number):
 try:
 # 頁碼輸入框和翻頁按鈕
 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()
 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:
 return next_page(page_number)


def get_products():
 # 判斷單個頁面是否被加載出來
 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))
 html = browser.page_source # 獲取頁面源代碼,所有的
 # 使用BS進(jìn)行分析
 soup = BeautifulSoup(html, 'lxml')
 items = soup.select('#mainsrp-itemlist .items .item')
 for item in items:
 image = item.select('.pic .img')[0]['data-src']
 price = item.select('.price strong')[0].text
 deal = item.select('.deal-cnt')[0].text[:-3]
 title = item.select('.title')[0].text.strip()
 shop = item.select('.shop')[0].text.strip()
 location = item.select('.location')[0].text
 product = {
  'image': image,
  'price': price,
  'deal': deal,
  'title': title,
  'shop': shop,
  'location': location
 }
 save_text(product) # 下載內(nèi)容


def save_text(product):
 # 保存為txt文件,a追加寫模式,編碼模式utf-8
 with open('text.txt', 'a', encoding='utf-8') as f:
 # 使用JSON把字典轉(zhuǎn)換為str格式,加換行符
 f.write(json.dumps(product, ensure_ascii=False) + '\n')
 f.close()


def main():
 # 通過關(guān)鍵字在淘寶進(jìn)行搜索
 total = search('美食')
 # 用正則提取頁碼數(shù)字
 total = int(re.compile('(\d+)').search(total).group(1))
 # 翻頁
 for i in range(2, total+1): # 循環(huán)包含前,不包含尾
 next_page(i)
 browser.close()


if __name__ == '__main__':
 main()

更多內(nèi)容請參考專題《python爬取功能匯總》進(jìn)行學(xué)習(xí)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python之Flask實現(xiàn)簡單登錄功能的示例代碼

    python之Flask實現(xiàn)簡單登錄功能的示例代碼

    這篇文章主要介紹了python之Flask實現(xiàn)簡單登錄功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • pandas滑動窗口學(xué)習(xí)筆記(shift, diff, pct_change)

    pandas滑動窗口學(xué)習(xí)筆記(shift, diff, pct_change)

    pandas中有3類窗口,分別是滑動窗口rolling?、擴(kuò)張窗口expanding以及指數(shù)加權(quán)窗口ewm,下面就來詳細(xì)的介紹一下這三種的用法,感興趣的可以了解一下
    2024-03-03
  • python批量處理txt文件的實例代碼

    python批量處理txt文件的實例代碼

    這篇文章主要介紹了python批量處理txt文件的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Python中l(wèi)ambda表達(dá)式的用法示例小結(jié)

    Python中l(wèi)ambda表達(dá)式的用法示例小結(jié)

    本文主要展示了一些lambda表達(dá)式的使用示例,通過這些示例,我們可以了解到lambda表達(dá)式的常用語法以及使用的場景,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • python字典保存為json后讀取出錯問題及解決

    python字典保存為json后讀取出錯問題及解決

    這篇文章主要介紹了python字典保存為json后讀取出錯問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 教你使用Python獲取QQ音樂某個歌手的歌單

    教你使用Python獲取QQ音樂某個歌手的歌單

    這篇文章主要介紹了Python獲取QQ音樂某個歌手的歌單,從qq音樂中獲取某個你喜歡的歌手的清單,涉及到的庫有requests、json,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Python列表中多元素刪除(移除)的實現(xiàn)

    Python列表中多元素刪除(移除)的實現(xiàn)

    本文主要介紹了Python列表中多元素刪除(移除)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 使用python批量修改XML文件中圖像的depth值

    使用python批量修改XML文件中圖像的depth值

    這篇文章主要介紹了使用python批量修改XML文件中圖像的depth值,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • python爬蟲租房信息在地圖上顯示的方法

    python爬蟲租房信息在地圖上顯示的方法

    這篇文章主要介紹了python爬蟲租房信息在地圖上顯示的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python類的實例化問題解決

    python類的實例化問題解決

    這篇文章主要介紹了python類的實例化問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08

最新評論