整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          利用selenium,pyquery庫抓取并處理京東

          利用selenium,pyquery庫抓取并處理京東上的圖片

          一,環境的搭建以及簡單的工具介紹

              1.selenium,一個用于Web應用程序測試的工具。其特點是直接運行在瀏覽器中,就像真正的用戶在操作一樣。新版本selenium2集成了 Selenium 1.0 以及 WebDriver;

              2.webDriver作用如下:執行代碼通過給Webdriver發送指令,讓Webdriver知道想要做的操作,Webdriver再根據這些操作在瀏覽器界面上進行控制,例如查找頁面元素、發送文本、實現事件點擊等等;

              3.pyquery作用如下:此處用到的pyquery主要是一個對html代碼數據進行提取的庫,可以用來替代beautifulsoup和正則表達式對h5的提取。

              如何導入所需要的庫:

                大部分教程中對于庫的導入都是使用的pip install指令,但是當安裝了多個python版本或者自己不知道自己python路徑的時候,在python中可能無法調用下載的python庫,此處直接使用pycharm進行  導入,示例如下:

                

                點擊file->setting

              點擊python interpreter右上角的加號,

               在界面中搜索想要的庫,點擊intsall package,便可以導入了。

          二.使用selenium模擬瀏覽器訪問京東頁面。  

          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 webdriver_manager.chrome import ChromeDriverManager
          from pyquery import PyQuery as pq
          
          browser=webdriver.Chrome(ChromeDriverManager().install())   #打開Chrome 瀏覽器
          wait=WebDriverWait(browser,10)
              try:
                  browser.get('https://www.jd.com')
                  input=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#key")))   #對輸入框進行指定
                  sbmit=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#search > div > div.form > button'))) #使用submit表示按鈕
                  input.send_keys('內容')               #輸入內容
                  sbmit.click()                 #點擊按鈕
                  total=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_bottomPage > span.p-skip > em:nth-child(1) > b')))
                  get_product()
                  return total.text
              except TimeoutException:
                  search()說明

             上方實現功能為打開京東并在搜索框中輸入內容框所指示的部分然后進行搜索,如果代碼有報錯無法打開chrome,是因為沒有使用webdriver_manager庫,添加該庫,其作用是自動聯網下載chromedriver是的webdriver.chrome可以運行。

          三. 模擬連續翻頁,方便進行搜索

            函數代碼如下: 

          def next_page(page_number):
              try:
                  input=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_bottomPage > span.p-skip > input')))
                  submit=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_bottomPage > span.p-skip > a')))
                  input.clear()
                  input.send_keys(page_number)
                  submit.click()
                  wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#J_bottomPage > span.p-num > a.curr'),str(page_number)))
                  get_product()
              except TimeoutException:
                  next_page(page_number)

          
          
          函數的功能為模擬在輸入框中輸入頁碼page_number,然后使用sunbmit.click語句嗎,模擬點擊翻頁。
          
          四.對數據進行抓取,并進行解析。
          函數代碼如下:
          
          def get_product():
             # wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_goodsList .gl-warp .gl-item')))  #檢測圖片是否加載完成
              html=browser.page_source         #獲取網頁源代碼
              doc=pq(html)
              items=doc('#J_goodsList .gl-warp .gl-item').items()        #獲取所有的選擇內容
              for item in items:
                  product={
                      'image': item.find('.p-img img').attr('src'),            #通過獲取src屬性來獲取圖片
                      'price': item.find('.p-price').text(),               #獲取文字內容
                      'name': item.find('.p-name').text(),    #獲取物品標題
                      'shop': item.find('.p-shop').text()                   #獲取商鋪信息
                      }
                  print(product)

          此處使用到的庫為pyquery,通過selenium庫對網頁源代碼進行獲取,然后通過pyquery的find語句查找相應的元素裝載到product中,最后進行打印。
          
          

          最后,小編想說:我是一名python開發工程師,整理了一套最新的python系統學習教程,想要這些資料的可以關注私信小編“01”即可(免費分享哦)希望能對你有所幫助。

          JavaScript中,您可以使用HTML5的<input type="file">元素來實現圖片上傳功能。

          以下是一個簡單的示例代碼,演示如何在JavaScript中上傳圖片:

          HTML部分:

          <input type="file" id="uploadInput">
          <button onclick="uploadImage()">上傳圖片</button>
          

          JavaScript部分:

          function uploadImage() {
            var fileInput=document.getElementById('uploadInput');
            var file=fileInput.files[0];
          
            if (file) {
              var formData=new FormData();
              formData.append('image', file);
          
              // 發送圖片數據到服務器
              // 這里可以使用XMLHttpRequest或fetch等方法發送請求
              // 請根據您的需求選擇適當的方法
              // 示例中使用XMLHttpRequest發送POST請求
              var xhr=new XMLHttpRequest();
              xhr.open('POST', '/upload', true);
              xhr.onload=function() {
                if (xhr.status===200) {
                  // 上傳成功
                  console.log('圖片上傳成功');
                } else {
                  // 上傳失敗
                  console.log('圖片上傳失敗');
                }
              };
              xhr.send(formData);
            }
          }
          

          API部分:

          [HttpPost]
          [RequestSizeLimit(5242880)]
           public async Task<APIResult> upload(IFormCollection collection)
           {
          
                      APIResult rtn=new APIResult();
          
                      if (collection==null)
                      {
                          rtn.code=-100;
                          rtn.msg="圖片列表為空";
                          return rtn;
                      }
                      else
                      {
                          try
                          {
                              string file_path="";
                              // 預處理 用戶參數:用戶指定子路徑                   
                              string userPath=DateTime.Now.ToString("yyyy-MM-dd");
                              if (collection.ContainsKey("path"))
                              {
                                  collection.TryGetValue("path", out Microsoft.Extensions.Primitives.StringValues val);
                                  if (!val.Equals("undefined"))
                                  {
                                      userPath=val.ToString();
                                  }
                              }
          
                              // 預處理 文件路徑
                              // 注意:這里可能會根據不同的環境來 修改 路徑前面是否需要添加 /
                              // 當發現上傳不成功,目錄無法創建時,可以嘗試修改這里
                              file_path=$"upload/imgs/{userPath}/";
                              var uploadPath=Path.Combine(_webHostEnvironment.WebRootPath, file_path);
                              if (!Directory.Exists(uploadPath))
                              {
                                  Directory.CreateDirectory(uploadPath);
                              }
          
                              // 處理文件
                              FormFileCollection filelist=(FormFileCollection)collection.Files;
                              foreach (IFormFile file in filelist)
                              {
                                  // 保存文件到磁盤
                                  string name=file.FileName;
                                  string FilePath=Path.Combine(uploadPath, name);
                                  string type=Path.GetExtension(name);
                                  using (var stream=System.IO.File.Create(FilePath))
                                  {
                                      await file.CopyToAsync(stream);
                                  };
          
                                  // 保存文件信息到表
                                  Sys_File f=new Sys_File();
                                  f.code="image";
                                  f.name=name;
                                  f.file_type=type.Trim('.');
                                  f.file_group=userPath;
                                  f.file_path=$"/{file_path}{name}";
                                  f.is_active=true;
                                  f.memo="";
                                  f.createTime=DateTime.Now;
                                  using (var dbctx=DBHelper.db)
                                  {
                                      await dbctx.AddAsync(f);
                                      await dbctx.SaveChangesAsync();
                                  };
                                  // 返回消息,包含文件路徑
                                  rtn.datas=$"/{file_path}{name}";
                                  rtn.code=100;
                                  rtn.msg="文件已保存!";
                              }
                          }
                          catch (Exception ex)
                          {
                              rtn.code=-200;
                              rtn.msg="圖片保存失敗!";
                              Log4NetUnit.Instance.Log.Error("圖片保存失敗:" + ex.Message);
                          }
                          return rtn;
                      }
                  }


          在這個示例中,我們首先在HTML中創建了一個<input type="file">元素,用于選擇要上傳的圖片。

          然后,我們在JavaScript中編寫了一個uploadImage函數,該函數在點擊"上傳圖片"按鈕時觸發。

          uploadImage函數中,我們首先獲取到<input>元素,并從中獲取到用戶選擇的圖片文件。

          然后,我們創建一個FormData對象,并將圖片文件添加到其中。

          接下來,我們可以使用XMLHttpRequest或fetch等方法將圖片數據發送到服務器。

          在示例中,我們使用XMLHttpRequest發送了一個POST請求,將圖片數據作為FormData發送到/upload端點。

          您需要根據您的實際情況修改URL和請求方法。

          當請求完成時,我們可以根據響應的狀態碼來判斷上傳是否成功。

          在示例中,如果狀態碼為200,則表示上傳成功,否則表示上傳失敗。

          請注意,由于安全性限制,JavaScript無法直接訪問用戶的文件系統。

          因此,用戶必須手動選擇要上傳的文件。


          主站蜘蛛池模板: 国产精品一区二区在线观看| 综合久久一区二区三区| 精品人妻一区二区三区四区在线| 嫩B人妻精品一区二区三区| 亚洲色精品VR一区区三区| 国产一区二区福利| 亚洲色偷精品一区二区三区| 久久精品一区二区三区不卡| 精品国产日韩一区三区| 亚洲av无码一区二区三区在线播放 | 欧洲精品码一区二区三区免费看| 人妻无码一区二区三区免费| 丰满爆乳一区二区三区| 国产一区二区在线观看app| 亚洲av高清在线观看一区二区| 日本精品视频一区二区| 国产亚洲福利精品一区二区| 国产精品视频免费一区二区| 一区二区无码免费视频网站| 亚洲AV日韩综合一区| 亚洲欧洲无码一区二区三区| 国产品无码一区二区三区在线| 亚洲福利电影一区二区?| 国产精品久久久久久麻豆一区| 中文字幕一区二区三区在线观看 | 亚洲视频一区在线| 无码人妻久久一区二区三区免费 | 日本视频一区二区三区| 免费一区二区无码视频在线播放| 国产三级一区二区三区| 亚洲AV无码一区二三区| 成人区人妻精品一区二区不卡网站| aⅴ一区二区三区无卡无码| 国产精品亚洲产品一区二区三区 | 黑巨人与欧美精品一区| 国产产一区二区三区久久毛片国语| 无码毛片一区二区三区中文字幕| 久久久不卡国产精品一区二区| 日产一区日产2区| 亚洲一区二区三区高清不卡| 韩国女主播一区二区|