首頁 web前端 js教程 使用selenium抓取淘寶的商品訊息

使用selenium抓取淘寶的商品訊息

Mar 23, 2018 pm 04:38 PM
selenium 資訊 商品

這次帶給大家使用selenium抓取淘寶的商品信息,使用selenium抓取淘寶商品信息的注意事項有哪些,下面就是實戰案例,一起來看一下。

淘寶的頁面大量使用了js載入數據,所以採用selenium來進行爬取更為簡單,selenum作為一個測試工具,主要配合無視窗瀏覽器phantomjs來使用。

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
'''
wait.until()语句是selenum里面的显示等待,wait是一个WebDriverWait对象,它设置了等待时间,如果页面在等待时间内
没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常,也可以说程序每隔xx秒看一眼,如果条件
成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException
1.presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
2.element_to_be_clickable 元素可点击
3.text_to_be_present_in_element 某个元素文本包含某文字
'''
# 定义一个无界面的浏览器
browser = webdriver.PhantomJS(
 service_args=[
  '--load-images=false',
  '--disk-cache=true'])
# 10s无响应就down掉
wait = WebDriverWait(browser, 10)
#虽然无界面但是必须要定义窗口
browser.set_window_size(1400, 900)
def search():
 '''
 此函数的作用为完成首页点击搜索的功能,替换标签可用于其他网页使用
 :return:
 '''
 print('正在搜索')
 try:
  #访问页面
  browser.get('https://www.taobao.com')
  # 选择到淘宝首页的输入框
  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 > p.search-button > button')))
  #send_key作为写到input的内容
  input.send_keys('面条')
  #执行点击搜索的操作
  submit.click()
  #查看到当前的页码一共是多少页
  total = wait.until(EC.presence_of_element_located(
   (By.CSS_SELECTOR, '#mainsrp-pager > p > p > p > p.total')))
  #获取所有的商品
  get_products()
  #返回总页数
  return total.text
 except TimeoutException:
  return search()
def next_page(page_number):
 '''
 翻页函数,
 :param page_number:
 :return:
 '''
 print('正在翻页', page_number)
 try:
  #这个是我们跳转页的输入框
  input = wait.until(EC.presence_of_element_located(
   (By.CSS_SELECTOR, '#mainsrp-pager > p > p > p > p.form > input')))
  #跳转时的确定按钮
  submit = wait.until(
   EC.element_to_be_clickable(
    (By.CSS_SELECTOR,
     '#mainsrp-pager > p > p > p > p.form > span.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 > p > p > p > ul > li.item.active > span'),
    str(page_number)))
  #调用函数获取商品信息
  get_products()
 #捕捉超时,重新进入翻页的函数
 except TimeoutException:
  next_page(page_number)
def get_products():
 '''
 搜到页面信息在此函数在爬取我们需要的信息
 :return:
 '''
 #每一个商品标签,这里是加载出来以后才会拿网页源代码
 wait.until(EC.presence_of_element_located(
  (By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))
 #这里拿到的是整个网页源代码
 html = browser.page_source
 #pq解析网页源代码
 doc = pq(html)
 items = doc('#mainsrp-itemlist .items .item').items()
 for item in items:
  # print(item)
  product = {
   'image': item.find('.pic .img').attr('src'),
   'price': item.find('.price').text(),
   'deal': item.find('.deal-cnt').text()[:-3],
   'title': item.find('.title').text(),
   'shop': item.find('.shop').text(),
   'location': item.find('.location').text()
  }
  print(product)
def main():
 try:
  #第一步搜索
  total = search()
  #int类型刚才找到的总页数标签,作为跳出循环的条件
  total = int(re.compile('(\d+)').search(total).group(1))
  #只要后面还有就继续爬,继续翻页
  for i in range(2, total + 1):
   next_page(i)
 except Exception:
  print('出错啦')
 finally:
  #关闭浏览器
  browser.close()
if name == 'main':
 main()
登入後複製

我相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

Express與Koa2的使用詳解

JS仿今日頭條手機端首頁介面

Vue枚舉型別實作HTML

以上是使用selenium抓取淘寶的商品訊息的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在Microsoft Word中刪除作者和上次修改的訊息 如何在Microsoft Word中刪除作者和上次修改的訊息 Apr 15, 2023 am 11:43 AM

Microsoft Word文件在儲存時包含一些元資料。這些詳細資訊用於在文件上識別,例如建立時間、作者是誰、修改日期等。它還具有其他信息,例如字元數,字數,段落數等等。如果您可能想要刪除作者或上次修改的資訊或任何其他訊息,以便其他人不知道這些值,那麼有一種方法。在本文中,讓我們看看如何刪除文件的作者和上次修改的資訊。刪除微軟Word文件中的作者和最後修改的資訊步驟 1 –前往

學會使用輕鬆的PyCharm安裝Selenium:PyCharm安裝及設定指南 學會使用輕鬆的PyCharm安裝Selenium:PyCharm安裝及設定指南 Jan 04, 2024 pm 09:48 PM

PyCharm安裝教學:輕鬆學會如何安裝Selenium,需要具體程式碼範例作為Python開發者而言,我們經常需要使用到各種第三方程式庫和工具來完成專案開發。其中,Selenium是一個非常常用的庫,用於自動化測試和Web應用程式的UI測試。而PyCharm作為Python開發的整合開發環境(IDE),為我們提供了方便快速的方式進行Python程式碼開發,那麼如何

Laravel開發:如何使用Laravel Dusk和Selenium進行瀏覽器測試? Laravel開發:如何使用Laravel Dusk和Selenium進行瀏覽器測試? Jun 14, 2023 pm 01:53 PM

Laravel開發:如何使用LaravelDusk和Selenium進行瀏覽器測試?隨著Web應用程式變得越來越複雜,我們需要確保其各個部分都能正常運作。瀏覽器測試是一種常見的測試方法,用於確保應用在各種不同瀏覽器下的正確性和穩定性。在Laravel開發中,可以使用LaravelDusk和Selenium進行瀏覽器測試。本文將介紹如何使用這兩個工具進行測

取得 Windows 11 中 GPU 的方法及顯示卡詳細資料檢查 取得 Windows 11 中 GPU 的方法及顯示卡詳細資料檢查 Nov 07, 2023 am 11:21 AM

使用系統資訊按一下“開始”,然後輸入“系統資訊”。只需單擊程序,如下圖所示。在這裡,您可以找到大多數系統訊息,而顯示卡資訊也是您可以找到的一件事。在“系統資訊”程式中,展開“組件”,然後按一下“顯示”。讓程式收集所有必要的信息,一旦準備就緒,您就可以在系統上找到特定於顯示卡的名稱和其他資訊。即使您有多個顯示卡,您也可以從這裡找到與連接到電腦的專用和整合式顯示卡相關的大多數內容。使用裝置管理員Windows11就像大多數其他版本的Windows一樣,您也可以從裝置管理員中找到電腦上的顯示卡。按一下“開始”,然後

如何與NameDrop分享聯絡人詳細資訊:iOS 17的操作指南 如何與NameDrop分享聯絡人詳細資訊:iOS 17的操作指南 Sep 16, 2023 pm 06:09 PM

在iOS17中,有一個新的AirDrop功能,讓你透過觸摸兩部iPhone來與某人交換聯絡資訊。它被稱為NameDrop,這是它的工作原理。 NameDrop允許您簡單地將iPhone放在他們的iPhone附近以交換聯繫方式,而不是輸入新人的號碼來給他們打電話或發短信,以便他們擁有您的號碼。將兩個設備放在一起將自動彈出聯絡人共享介面。點擊彈出視窗會顯示一個人的聯絡資訊及其聯絡人海報(您可以自訂和編輯自己的照片,也是iOS17的新功能)。該畫面還包括「僅接收」或分享您自己的聯絡資訊作為回應的選項。

利用多光照資訊的單視角NeRF演算法S^3-NeRF,可恢復場景幾何與材質訊息 利用多光照資訊的單視角NeRF演算法S^3-NeRF,可恢復場景幾何與材質訊息 Apr 13, 2023 am 10:58 AM

目前影像 3D 重建工作通常採用恆定自然光照條件下從多個視點(multi-view)捕捉目標場景的多視圖立體重建方法(Multi-view Stereo)。然而,這些方法通常假設朗伯表面,並且難以恢復高頻細節。另一種場景重建方法是利用固定視點但在不同點光源下捕捉的影像。例如光度立體 (Photometric Stereo) 方法就採用這種設定並利用其 shading 資訊來重建非朗伯物體的表面細節。然而,現有的單視圖方法通常採用法線貼圖(normal map)或深度圖(depth map)來表徵可

NameDrop 如何在 iPhone 上運作(以及如何停用它) NameDrop 如何在 iPhone 上運作(以及如何停用它) Nov 30, 2023 am 11:53 AM

在iOS17中,有一個新的AirDrop功能,可讓您透過同時觸摸兩部iPhone來與某人交換聯絡資訊。它被稱為NameDrop,這是它的實際工作原理。 NameDrop無需輸入新人的號碼來給他們打電話或發短信,以便他們擁有您的號碼,您只需將iPhone靠近他們的iPhone即可交換聯絡方式。將兩台裝置放在一起會自動彈出聯絡人共用介面。點擊彈出視窗會顯示一個人的聯絡資訊和他們的聯絡人海報(您可以自訂和編輯的您自己的照片,也是iOS17的新功能)。該畫面還包括「僅接收」或分享您自己的聯絡資訊作為回應

如何在MySQL中設計商城的商品表結構? 如何在MySQL中設計商城的商品表結構? Oct 31, 2023 am 08:14 AM

如何在MySQL中設計商城的商品表結構? MySQL是一種常用的關聯式資料庫管理系統,廣泛應用於各種類型的網站和應用程式。在設計商城的商品表結構時,需要考慮到商品的屬性、分類、庫存等因素。以下將詳細介紹如何在MySQL中設計商城的商品表結構,並給出具體的程式碼範例。商品表的基本資訊:在設計商品表結構時,首先需要確定商品的基本訊息,如商品名稱、價格、描述、圖片

See all articles