Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产成人一区二区三区精品久久,一区二区三区在线视频观看,成人免费精品视频

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          正則神級(jí)應(yīng)用-替換HTML資源引用

          何用正則替換css文件路徑

          例如:

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

          請(qǐng)問這樣如何替換呢?

          正則表達(dá)式

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

          替換文本

          /path1/path2/

          測(cè)試文本

          <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>

          替換效果

          敬的讀者們:您好!作為一名資深網(wǎng)絡(luò)開發(fā)師,在此向您介紹我在項(xiàng)目實(shí)踐中所運(yùn)用到的HTML網(wǎng)頁(yè)內(nèi)容提取神器——這便是一款免費(fèi)且功能強(qiáng)大的軟件,極大地節(jié)省了我寶貴的時(shí)間與精力。接下來將為您講解這款神奇的工具在使用過程中的十大要點(diǎn)。期待這些信息能對(duì)您有所裨益。

          1.網(wǎng)頁(yè)解析功能

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

          2.靈活定制抓取規(guī)則

          本工具賦予您對(duì)網(wǎng)頁(yè)結(jié)構(gòu)及特性進(jìn)行個(gè)性化抓取規(guī)則設(shè)定的權(quán)力,無論您所需的是簡(jiǎn)易標(biāo)簽選擇器或是精密的正則表達(dá)式,皆能得到滿足。

          3.多種輸出格式

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

          4.批量處理功能

          此款工具適用于管理多個(gè)網(wǎng)頁(yè)數(shù)據(jù),能夠一次性批量處理,迅速且精確地從海量網(wǎng)頁(yè)中萃取所需信息。

          5.自動(dòng)化任務(wù)

          此應(yīng)用程式具備自動(dòng)執(zhí)行任務(wù)之特性,用戶可設(shè)定定時(shí)任務(wù)以自動(dòng)采集特定網(wǎng)站內(nèi)頁(yè)。對(duì)于需求定時(shí)更新資訊者,其效用不言而喻。

          6.強(qiáng)大的過濾功能

          運(yùn)用此款利器所具備之篩選功能,可將無關(guān)或重復(fù)信息隔絕在外,保存所需關(guān)鍵訊息。如此操作有助于提升數(shù)據(jù)之準(zhǔn)確度及實(shí)用性。

          7.友好的用戶界面

          此工具的用戶界面設(shè)計(jì)簡(jiǎn)潔直觀,便于使用,且無需具備編程知識(shí)就能迅速掌握并滿足需求。

          8.快速響應(yīng)和更新

          此工具的締造者隊(duì)伍十分專業(yè)化,反應(yīng)迅捷,注重滿足用戶反饋及需求,持續(xù)升級(jí)以及完善其各項(xiàng)功能與特性。

          9.豐富的文檔和教程

          為確保用戶深入掌握此產(chǎn)品,研發(fā)團(tuán)隊(duì)推出詳盡文檔和教程,旨在向廣大用戶及專業(yè)開發(fā)人員提供援助與指南。

          10.免費(fèi)且開源

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

          以上即為關(guān)于HTML網(wǎng)頁(yè)內(nèi)容提取工具使用心得的分享。期待能為您在頁(yè)面挖掘方面提供有益參考。若您有任何疑問或建議,請(qǐng)隨時(shí)賜教。感謝各位閱讀!

          次爬取用到的知識(shí)點(diǎn)有:

          1. selenium
          2. pymysql
          3. pyquery

          正文

          1. 分析目標(biāo)網(wǎng)站
          2. 打開某寶首頁(yè), 輸入"男裝"后點(diǎn)擊"搜索", 則跳轉(zhuǎn)到"男裝"的搜索界面.
          3. 空白處"右擊"再點(diǎn)擊"檢查"審查網(wǎng)頁(yè)元素, 點(diǎn)擊"Network".

          1) 找到對(duì)應(yīng)的URL, URL里的參數(shù)正是Query String Parameters的參數(shù), 且請(qǐng)求方式是GET

          2) 我們請(qǐng)求該URL得到內(nèi)容就是"Response"里的內(nèi)容, 那么點(diǎn)擊它來確認(rèn)信息.

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

          4) 任意復(fù)制一個(gè)商品信息, 空白處右擊再點(diǎn)擊"查看網(wǎng)頁(yè)源代碼", 在源碼查找該商品, 即可看到該商品的信息.

          5) 對(duì)比網(wǎng)頁(yè)源代碼和"Response"響應(yīng)內(nèi)容, 發(fā)現(xiàn)源代碼<script>..........</script>中的商品信息被替換, 這便是采用了JS加密

          6) 如果去請(qǐng)求上面的URL, 得到的則是加密過的信息, 這時(shí)就可以利用Selenium庫(kù)來模擬瀏覽器, 進(jìn)而得到商品信息.

          獲取單個(gè)商品界面

          1. 請(qǐng)求網(wǎng)站
          # -*- coding: utf-8 -*-
          from selenium import webdriver #從selenium導(dǎo)入瀏覽器驅(qū)動(dòng)
          browser = webdriver.Chrome() #聲明驅(qū)動(dòng)對(duì)象, 即Chrome瀏覽器
          def get_one_page():
           '''獲取單個(gè)頁(yè)面'''
           browser.get("https://www.xxxxx.com") #請(qǐng)求網(wǎng)站
          
          1. 輸入"男裝", 在輸入之前, 需要判斷輸入框是否存在, 如果存在則輸入"男裝", 不存在則等待顯示成功.
          # -*- coding: utf-8 -*-
          from selenium import webdriver 
          from selenium.webdriver.common.by import By #導(dǎo)入元素定位方法模塊
          from selenium.webdriver.support.ui import WebDriverWait #導(dǎo)入等待判斷模塊
          from selenium.webdriver.support import expected_conditions as EC #導(dǎo)入判斷條件模塊
          browser = webdriver.Chrome() 
          def get_one_page():
           '''獲取單個(gè)頁(yè)面'''
           browser.get("https://www.xxxxx.com") 
           input = WebDriverWait(browser,10).until( #等待判斷
           EC.presence_of_element_located((By.CSS_SELECTOR,"#q"))) #若輸入框顯示成功,則獲取,否則等待
           input.send_keys("男裝") #輸入商品名稱
          
          1. 下一步就是點(diǎn)擊"搜索"按鈕, 按鈕具有屬性: 可點(diǎn)擊, 那么加入判斷條件.
          # -*- 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():
           '''獲取單個(gè)頁(yè)面'''
           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"))) #若按鈕可點(diǎn)擊, 則獲取, 否則等待
           button.click() 
          
          1. 獲取總的頁(yè)數(shù), 同樣加入等待判斷.
          # -*- 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():
           '''獲取單個(gè)頁(yè)面'''
           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"))) # 若總頁(yè)數(shù)加載成功,則獲取總頁(yè)數(shù),否則等待 
           return pages.text
          def main():
           pages = get_one_page()
           print(pages)
          if __name__ == '__main__':
           main()
          
          1. 打印出來的不是我們想要的結(jié)果, 利用正則表達(dá)式獲取, 最后再利用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():
           '''獲取單個(gè)頁(yè)面'''
           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() #如果超時(shí),繼續(xù)獲取
          def main():
           pages = get_one_page()
           pages = int(re.compile("(\d+)").findall(pages)[0]) #采用正則表達(dá)式提取文本中的總頁(yè)數(shù)
           print(pages)
          if __name__ == '__main__':
           main()
          ?
          

          關(guān)于Selenium的更多內(nèi)容,可參看官方文檔https://selenium-python.readthedocs.io/waits.html

          獲取多個(gè)商品界面

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

          需要注意的是, 最后要加入判斷: 高亮是否是當(dāng)前頁(yè)

          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) # 輸入頁(yè)碼
           button = WebDriverWait(browser, 10).until( 
           EC.element_to_be_clickable((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit"))) # 若按鈕可點(diǎn)擊,則獲取,否則等待
           button.click() # 點(diǎn)擊按鈕
           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))) # 判斷高亮是否是當(dāng)前頁(yè)
           except TimeoutException: # 超時(shí), 繼續(xù)請(qǐng)求
           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()
          

          獲取商品信息

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

          需要注意的是, 在"get_one_page"和"get_next_page"中調(diào)用之后, 才可執(zhí)行

          def get_info():
           """獲取詳情"""
           WebDriverWait(browser,20).until(EC.presence_of_element_located((
           By.CSS_SELECTOR,"#mainsrp-itemlist .items .item"))) #判斷商品信息是否加載成功
           text = browser.page_source #獲取網(wǎng)頁(yè)源碼
           html = pq(text) #初始化網(wǎng)頁(yè)源碼
           items = html('#mainsrp-itemlist .items .item').items() #采用items方法會(huì)得到生成器
           for item in items: #遍歷每個(gè)節(jié)點(diǎn)對(duì)象
           data = []
           image = item.find(".pic .img").attr("src") #用find方法查找子孫節(jié)點(diǎn),用attr方法獲取屬性名稱
           price = item.find(".price").text().strip().replace("\n","") #用text方法獲取文本,strip()去掉前后字符串,默認(rèn)是空格
           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數(shù)據(jù)庫(kù)

          def save_to_mysql(data):
           """存儲(chǔ)到數(shù)據(jù)庫(kù)"""
           # 創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
           db= pymysql.connect(host = "localhost",user = "root",password = "password",port = 3306, db = "spiders",charset = "utf8")
           # 獲取游標(biāo)
           cursor = db.cursor()
           #創(chuàng)建數(shù)據(jù)庫(kù)
           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語(yǔ)句
           sql = "INSERT INTO {0} values(%s,%s,%s,%s,%s,%s)".format("男裝")
           try:
           #傳入?yún)?shù)sql,data
           if cursor.execute(sql,data):
           #插入數(shù)據(jù)庫(kù)
           db.commit()
           print("********已入庫(kù)**********")
           except:
           print("#########入庫(kù)失敗#########")
           #回滾,相當(dāng)什么都沒做
           db.rollback()
           #關(guān)閉數(shù)據(jù)庫(kù)
           db.close()
          

          完整代碼


          主站蜘蛛池模板: 亚洲一区二区三区影院| 69久久精品无码一区二区| 日韩免费视频一区| 一区二区三区视频免费| 一区二区视频在线观看| 东京热人妻无码一区二区av| 黑人一区二区三区中文字幕| 精品国产一区二区三区久久久狼| 免费一区二区视频| 国产一区内射最近更新| 国产精品美女一区二区 | 中文字幕亚洲一区| 日本内射精品一区二区视频| 国产福利视频一区二区| 一区二区高清视频在线观看| 国产精品亚洲专区一区| 日韩一区二区三区不卡视频| 精品免费国产一区二区三区 | 亚洲一区二区无码偷拍| 久久国产一区二区| 日韩国产精品无码一区二区三区 | 欧美激情一区二区三区成人| 久久久无码精品国产一区| 久久久久人妻精品一区蜜桃| 亚洲V无码一区二区三区四区观看| 久久精品国产免费一区| 蜜桃视频一区二区三区在线观看| 久久精品午夜一区二区福利| 亚洲一区二区三区91| 日本国产一区二区三区在线观看| 成人免费一区二区三区在线观看| 亚洲一本一道一区二区三区 | 少妇精品无码一区二区三区| 成人精品视频一区二区三区不卡 | 国产成人无码一区二区在线观看| 免费精品一区二区三区第35| 午夜天堂一区人妻| 性色AV一区二区三区| 一区二区三区观看免费中文视频在线播放 | 精品无码一区在线观看| 亚洲视频一区二区三区|