整合營銷服務商

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

          免費咨詢熱線:

          正則神級應用-替換HTML資源引用

          何用正則替換css文件路徑

          例如:

          <link href="css/main.css" type="text/css" rel="stylesheet">
          替換成
          <link href="/path1/path2/css/main.css" type="text/css" rel="stylesheet">

          請問這樣如何替換呢?

          正則表達式

          # 下面正則式二選一
          (<link[^>]*?href=[""'])(\.{2}\/plugins?)([^""']+)([^>]+>)
          (<link[^>]*?href=[""'])(\.{2}\/dist+)([^""']+)([^>]+>)

          替換文本

          /path1/path2/

          測試文本

          <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <title>{{ ORGANIZATION }} | 登錄</title>
          
          <!-- Google Font: Source Sans Pro -->
          <link rel="stylesheet"
          href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
          <!-- Font Awesome -->
          <link rel="stylesheet" href="../plugins/fontawesome-free/css/all.min.css">
          <!-- icheck bootstrap -->
          <link rel="stylesheet" href="../plugins/icheck-bootstrap/icheck-bootstrap.min.css">
          <!-- Theme style -->
          <link rel="stylesheet" href="../dist/css/adminlte.min.css">
          </head>

          替換效果

          敬的讀者們:您好!作為一名資深網絡開發師,在此向您介紹我在項目實踐中所運用到的HTML網頁內容提取神器——這便是一款免費且功能強大的軟件,極大地節省了我寶貴的時間與精力。接下來將為您講解這款神奇的工具在使用過程中的十大要點。期待這些信息能對您有所裨益。

          1.網頁解析功能

          此款智能工具能深入剖析HTML頁面,精確抽取文本、圖像及鏈接等多種關鍵資源,僅需明晰設定與操作便可迅速獲取所需信息,極大提升使用效率。

          2.靈活定制抓取規則

          本工具賦予您對網頁結構及特性進行個性化抓取規則設定的權力,無論您所需的是簡易標簽選擇器或是精密的正則表達式,皆能得到滿足。

          3.多種輸出格式

          此款神器支持多種導出格式,如文本、Excel表單和JSON等,方便您根據實際需求選擇最佳的輸出方案。

          4.批量處理功能

          此款工具適用于管理多個網頁數據,能夠一次性批量處理,迅速且精確地從海量網頁中萃取所需信息。

          5.自動化任務

          此應用程式具備自動執行任務之特性,用戶可設定定時任務以自動采集特定網站內頁。對于需求定時更新資訊者,其效用不言而喻。

          6.強大的過濾功能

          運用此款利器所具備之篩選功能,可將無關或重復信息隔絕在外,保存所需關鍵訊息。如此操作有助于提升數據之準確度及實用性。

          7.友好的用戶界面

          此工具的用戶界面設計簡潔直觀,便于使用,且無需具備編程知識就能迅速掌握并滿足需求。

          8.快速響應和更新

          此工具的締造者隊伍十分專業化,反應迅捷,注重滿足用戶反饋及需求,持續升級以及完善其各項功能與特性。

          9.豐富的文檔和教程

          為確保用戶深入掌握此產品,研發團隊推出詳盡文檔和教程,旨在向廣大用戶及專業開發人員提供援助與指南。

          10.免費且開源

          在此鄭重聲明,此工具完全提供免費且可公開獲取的源代碼。用戶可以無限制地使用及修改此軟件,并且可以任意傳播。這尤其適合資金有限以及希望訂制工具的人士選用。

          以上即為關于HTML網頁內容提取工具使用心得的分享。期待能為您在頁面挖掘方面提供有益參考。若您有任何疑問或建議,請隨時賜教。感謝各位閱讀!

          次爬取用到的知識點有:

          1. selenium
          2. pymysql
          3. pyquery

          正文

          1. 分析目標網站
          2. 打開某寶首頁, 輸入"男裝"后點擊"搜索", 則跳轉到"男裝"的搜索界面.
          3. 空白處"右擊"再點擊"檢查"審查網頁元素, 點擊"Network".

          1) 找到對應的URL, URL里的參數正是Query String Parameters的參數, 且請求方式是GET

          2) 我們請求該URL得到內容就是"Response"里的內容, 那么點擊它來確認信息.

          3) 下拉看到"男裝"字樣, 那么再往下找, 并沒有發現有關"男裝"的商品信息.

          4) 任意復制一個商品信息, 空白處右擊再點擊"查看網頁源代碼", 在源碼查找該商品, 即可看到該商品的信息.

          5) 對比網頁源代碼和"Response"響應內容, 發現源代碼<script>..........</script>中的商品信息被替換, 這便是采用了JS加密

          6) 如果去請求上面的URL, 得到的則是加密過的信息, 這時就可以利用Selenium庫來模擬瀏覽器, 進而得到商品信息.

          獲取單個商品界面

          1. 請求網站
          # -*- coding: utf-8 -*-
          from selenium import webdriver #從selenium導入瀏覽器驅動
          browser = webdriver.Chrome() #聲明驅動對象, 即Chrome瀏覽器
          def get_one_page():
           '''獲取單個頁面'''
           browser.get("https://www.xxxxx.com") #請求網站
          
          1. 輸入"男裝", 在輸入之前, 需要判斷輸入框是否存在, 如果存在則輸入"男裝", 不存在則等待顯示成功.
          # -*- coding: utf-8 -*-
          from selenium import webdriver 
          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() 
          def get_one_page():
           '''獲取單個頁面'''
           browser.get("https://www.xxxxx.com") 
           input = WebDriverWait(browser,10).until( #等待判斷
           EC.presence_of_element_located((By.CSS_SELECTOR,"#q"))) #若輸入框顯示成功,則獲取,否則等待
           input.send_keys("男裝") #輸入商品名稱
          
          1. 下一步就是點擊"搜索"按鈕, 按鈕具有屬性: 可點擊, 那么加入判斷條件.
          # -*- coding: utf-8 -*-
          from selenium import webdriver 
          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() 
          def get_one_page():
           '''獲取單個頁面'''
           browser.get("https://www.xxxxx.com") 
           input = WebDriverWait(browser,10).until( 
           EC.presence_of_element_located((By.CSS_SELECTOR,"#q"))) #
           input.send_keys("男裝") 
           button = WebDriverWait(browser,10).until( #等待判斷
           EC.element_to_be_clickable((By.CSS_SELECTOR,"#J_TSearchForm > div.search-button > button"))) #若按鈕可點擊, 則獲取, 否則等待
           button.click() 
          
          1. 獲取總的頁數, 同樣加入等待判斷.
          # -*- coding: utf-8 -*-
          ?
          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
          browser = webdriver.Chrome()
          def get_one_page():
           '''獲取單個頁面'''
           browser.get("https://www.xxxxx.com")
           input = WebDriverWait(browser, 10).until(
           EC.presence_of_element_located((By.CSS_SELECTOR, "#q")))
           input.send_keys("男裝")
           button = WebDriverWait(browser, 10).until(
           EC.element_to_be_clickable(
           (By.CSS_SELECTOR, "#J_TSearchForm > div.search-button > button")))
           button.click() 
           pages = WebDriverWait(browser, 10).until( # 等待判斷
           EC.presence_of_element_located(
           (By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.total"))) # 若總頁數加載成功,則獲取總頁數,否則等待 
           return pages.text
          def main():
           pages = get_one_page()
           print(pages)
          if __name__ == '__main__':
           main()
          
          1. 打印出來的不是我們想要的結果, 利用正則表達式獲取, 最后再利用try...except捕捉異常
          # -*- coding: utf-8 -*-
          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 
          browser = webdriver.Chrome() 
          def get_one_page():
           '''獲取單個頁面'''
           try:
           browser.get("https://www.xxxxx.com") 
           input = WebDriverWait(browser,10).until(
           EC.presence_of_element_located((By.CSS_SELECTOR,"#q"))) 
           input.send_keys("男裝") 
           button = WebDriverWait(browser,10).until(
           EC.element_to_be_clickable((By.CSS_SELECTOR,"#J_TSearchForm > div.search-button > button"))) 
           button.click() 
           pages = WebDriverWait(browser,10).until(
           EC.presence_of_element_located((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > div.total"))) 
           return pages.text
           except TimeoutException:
           return get_one_page() #如果超時,繼續獲取
          def main():
           pages = get_one_page()
           pages = int(re.compile("(\d+)").findall(pages)[0]) #采用正則表達式提取文本中的總頁數
           print(pages)
          if __name__ == '__main__':
           main()
          ?
          

          關于Selenium的更多內容,可參看官方文檔https://selenium-python.readthedocs.io/waits.html

          獲取多個商品界面

          采用獲取"到第 頁"輸入框方式, 切換到下一頁, 同樣是等待判斷

          需要注意的是, 最后要加入判斷: 高亮是否是當前頁

          def get_next_page(page):
           try:
           input = WebDriverWait(browser, 10).until( 
           EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > input"))) # 若輸入框加載成功,則獲取,否則等待
           input.send_keys(page) # 輸入頁碼
           button = WebDriverWait(browser, 10).until( 
           EC.element_to_be_clickable((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit"))) # 若按鈕可點擊,則獲取,否則等待
           button.click() # 點擊按鈕
           WebDriverWait(browser,10).until(
           EC.text_to_be_present_in_element((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > ul > li.item.active > span"),str(page))) # 判斷高亮是否是當前頁
           except TimeoutException: # 超時, 繼續請求
           return get_next_page(page)
          def main():
           pages = get_one_page()
           pages = int(re.compile("(\d+)").findall(pages)[0])
           for page in range(1,pages+1):
           get_next_page(page)
          if __name__ == '__main__':
           main()
          

          獲取商品信息

          首先, 判斷信息是否加載成功, 緊接著獲取源碼并初始化, 進而解析.

          需要注意的是, 在"get_one_page"和"get_next_page"中調用之后, 才可執行

          def get_info():
           """獲取詳情"""
           WebDriverWait(browser,20).until(EC.presence_of_element_located((
           By.CSS_SELECTOR,"#mainsrp-itemlist .items .item"))) #判斷商品信息是否加載成功
           text = browser.page_source #獲取網頁源碼
           html = pq(text) #初始化網頁源碼
           items = html('#mainsrp-itemlist .items .item').items() #采用items方法會得到生成器
           for item in items: #遍歷每個節點對象
           data = []
           image = item.find(".pic .img").attr("src") #用find方法查找子孫節點,用attr方法獲取屬性名稱
           price = item.find(".price").text().strip().replace("\n","") #用text方法獲取文本,strip()去掉前后字符串,默認是空格
           deal = item.find(".deal-cnt").text()[:-2]
           title = item.find(".title").text().strip()
           shop = item.find(".shop").text().strip()
           location = item.find(".location").text()
           data.append([shop, location, title, price, deal, image])
           print(data)
          

          保存到MySQL數據庫

          def save_to_mysql(data):
           """存儲到數據庫"""
           # 創建數據庫連接對象
           db= pymysql.connect(host = "localhost",user = "root",password = "password",port = 3306, db = "spiders",charset = "utf8")
           # 獲取游標
           cursor = db.cursor()
           #創建數據庫
           cursor.execute("CREATE TABLE IF NOT EXISTS {0}(shop VARCHAR(20),location VARCHAR(10),title VARCHAR(255),price VARCHAR(20),deal VARCHAR(20), image VARCHAR(255))".format("男裝"))
           #SQL語句
           sql = "INSERT INTO {0} values(%s,%s,%s,%s,%s,%s)".format("男裝")
           try:
           #傳入參數sql,data
           if cursor.execute(sql,data):
           #插入數據庫
           db.commit()
           print("********已入庫**********")
           except:
           print("#########入庫失敗#########")
           #回滾,相當什么都沒做
           db.rollback()
           #關閉數據庫
           db.close()
          

          完整代碼


          主站蜘蛛池模板: 成人精品视频一区二区三区不卡 | 精品一区二区三区在线观看视频| 玩弄放荡人妻一区二区三区| 日本伊人精品一区二区三区| 肥臀熟女一区二区三区 | 无码精品人妻一区二区三区人妻斩| 国产福利电影一区二区三区,日韩伦理电影在线福 | 国产成人精品一区二区三区| 青娱乐国产官网极品一区| 国产一区二区三区在线免费| 精品女同一区二区| 一区二区三区日本视频| 精品国产一区二区三区在线观看| 久久久久人妻一区精品果冻| 国产精品第一区第27页| 国产午夜精品一区二区三区嫩草 | 亚洲AV香蕉一区区二区三区| 日本高清一区二区三区 | 久久久综合亚洲色一区二区三区| 日韩国产精品无码一区二区三区 | 亚洲日韩精品一区二区三区无码| 国产一区二区免费| 麻豆一区二区在我观看| 波多野结衣一区二区| 春暖花开亚洲性无区一区二区| 精品人妻一区二区三区四区| 国产精品99无码一区二区| 国产日韩精品一区二区三区在线| 久久精品一区二区东京热| 伦精品一区二区三区视频| 国产亚洲福利一区二区免费看| 亚洲国产一区明星换脸| 无码人妻精品一区二区三18禁| 国产91精品一区二区麻豆网站 | 蜜臀Av午夜一区二区三区| 精品国产免费观看一区 | 久久久精品人妻一区二区三区 | 日韩电影在线观看第一区| 精品一区二区无码AV| 深田咏美AV一区二区三区| 一本大道在线无码一区|