国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

爬蟲實戰(zhàn):探索XPath爬蟲技巧之熱榜新聞

這篇具有很好參考價值的文章主要介紹了爬蟲實戰(zhàn):探索XPath爬蟲技巧之熱榜新聞。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

之前我們已經詳細討論了如何使用BeautifulSoup這個強大的工具來解析HTML頁面,另外還介紹了利用在線工具來抓取HTTP請求以獲取數據的方法。在今天的學習中,我們將繼續(xù)探討另一種常見的網絡爬蟲技巧:XPath。XPath是一種用于定位和選擇XML文檔中特定部分的語言,雖然它最初是為XML設計的,但同樣適用于HTML文檔的解析。

HTML和XML有很多相似之處,比如標簽、屬性等,因此XPath同樣可以在HTML文檔中有效地定位元素。爬蟲可以利用XPath表達式來指定需要提取的數據的位置,然后通過XPath解析器來解析HTML文檔,從而提取所需的信息。

好的,我們不多說,直接開始今天的任務,爬取36kr的熱榜新聞以及新聞搜索。

XPath爬蟲

如果對XPath不熟悉也沒關系,可以直接使用它,就能發(fā)現它與我們之前使用的BeautifulSoup有著相同的目的。只是在表達式和方法的使用上略有不同。在進行爬蟲之前,我們可以先下載一個XPath工具。之前我們編寫B(tài)eautifulSoup代碼時,需要自行查找HTML代碼中的標簽并編寫代碼進行解析,這樣很費眼。而在瀏覽器中可以使用插件工具來直接提取XPath元素。

XPath插件

有很多瀏覽器插件可供選擇,我們只需直接獲取一個即可。最重要的是,這些插件可以讓我們在選擇時輕松復制表達式,就像這樣:

爬蟲實戰(zhàn):探索XPath爬蟲技巧之熱榜新聞

當我打開插件工具后,立即觸發(fā)左鍵操作,從而開始顯示紅色框框,用戶選擇后,系統(tǒng)會呈現一系列XPath表達式供選擇,用戶只需選取適當的表達式即可。

爬蟲實戰(zhàn):探索XPath爬蟲技巧之熱榜新聞

熱榜新聞

會使用工具后,我們將繼續(xù)進行數據爬取和頁面信息解析。在此之前,需要安裝一個新的依賴庫lxml。以下是一個示例代碼供參考:

from lxml import etree
import requests
 
hot_article_list = []

headers = {
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}
def get_hot_article():
    url = 'https://36kr.com/hot-list/catalog'
    response = requests.get(url=url,headers=headers)
    # 獲取的html內容是字節(jié),將其轉化為字符串
    #使用etree進行解析
    data = etree.HTML(response.text)

    # 使用XPath定位元素
    # 提取a標簽的article-item-title文本數據以及url連接
    article_titles = data.xpath("(//a[@class='article-item-title weight-bold'])")
    article_desc = data.xpath("(//a[@class='article-item-description ellipsis-2'])")

    if len(article_titles) == len(article_desc):
        for article, desc in zip(article_titles, article_desc):
            # 獲取元素的鏈接(href 屬性)
            link = article.get('href')
            # 獲取元素的文本內容
            title = article.text
            desc = desc.text
            hot_article_list.append({
                "title":title,
                "link":link,
                "desc":desc
            })
    else:
        print("未找到指定元素")
print(hot_article_list)

這段代碼的功能是從36氪網站的熱門文章列表中提取文章的標題、鏈接和描述信息,并將這些信息存儲在一個列表中。其中,lxml庫用于HTML解析,requests庫用于發(fā)送HTTP請求。接著,定義了一個空列表hot_article_list,用于存儲提取的文章信息。

踩個小坑

在前面已經成功提取了熱門文章標題和鏈接,接下來通常應該開始逐個訪問這些鏈接以查看新聞詳情。然而,在發(fā)送請求獲取單個URL鏈接時,卻未能獲得預期的新聞信息,出現了以下情況:

爬蟲實戰(zhàn):探索XPath爬蟲技巧之熱榜新聞

通常情況下,網頁中的數據要么直接包含在靜態(tài)HTML中,比如之前我們解析的美食菜譜等;要么是通過Ajax的HTTP請求獲取的,比如我們嘗試獲取騰訊云社區(qū)的文章列表。通常,這些數據都可以在搜索中找到相應的匹配項。然而,我花了一個小時的時間仍未能成功獲取所需信息。最初,我懷疑可能是因為網頁中存在跳轉頁面?zhèn)鬏敂祿?,因此我特意使用抓包工具進行了下載,但令人失望的是,并沒有發(fā)現相關數據。

因此,我又仔細檢查了一遍靜態(tài)HTML代碼,并在代碼末尾發(fā)現了一個奇怪之處——HTML頁面的部分竟然被加密了。讓我們來看看這段代碼吧。

爬蟲實戰(zhàn):探索XPath爬蟲技巧之熱榜新聞

如果你對這些內容感到疑惑,建議再次在搜索框中輸入相關關鍵字以查找更多信息。很可能存在解密函數。果然如此。我們接下來看下。

爬蟲實戰(zhàn):探索XPath爬蟲技巧之熱榜新聞

既然官方對數據進行了加密處理,顯然是出于一定的考慮,其中可能包括對爬蟲的防護等因素。鑒于此,我決定不再嘗試對其進行解密操作,這個就這樣吧。

信息搜索

36氪網站不僅提供了熱門文章信息,還支持新聞搜索功能。讓我們深入探討一下搜索功能的實現方式。通常情況下,靜態(tài)頁面即可滿足需求進行信息提取。但若希望獲取更多數據,就需要通過發(fā)送ajax請求來實現。

爬蟲實戰(zhàn):探索XPath爬蟲技巧之熱榜新聞

接著看代碼:

from lxml import etree
from urllib.parse import quote
import requests

def get_article_search(keyword):
    qk = quote(keyword)
    url = f'https://36kr.com/search/articles/{qk}'
    response = requests.get(url=url,headers=headers)
    # 獲取的html內容是字節(jié),將其轉化為字符串
    #使用etree進行解析
    data = etree.HTML(response.text)
    # 使用XPath定位元素
    # 提取a標簽的article-item-title文本數據以及url連接
    article_detail = data.xpath("(//p[@class='title-wrapper ellipsis-2']//a)")
    for a_tag in article_detail:
        text = a_tag.xpath("string()").strip()
        url = a_tag.get("href")
        print("文本:", text)
        print("URL連接:", url)



def get_article_url(keyword):

    headers = {
        'Accept': '*/*',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'Connection': 'keep-alive',
        'Content-Type': 'application/json',
        'Cookie': 'Hm_lvt_713123c60a0e86982326bae1a51083e1=1710743069; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218b40a4b8576e0-0508814adc1724-745d5774-2073600-18b40a4b858109a%22%2C%22%24device_id%22%3A%2218b40a4b8576e0-0508814adc1724-745d5774-2073600-18b40a4b858109a%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; Hm_lvt_1684191ccae0314c6254306a8333d090=1710743069; aliyungf_tc=9f944307bb330cb7a00e123533aad0ee8a0e932e77510b0782e3ea63cddc99cf; Hm_lpvt_713123c60a0e86982326bae1a51083e1=1710750569; Hm_lpvt_1684191ccae0314c6254306a8333d090=1710750569',
        'Origin': 'https://36kr.com',
        'Referer': 'https://36kr.com/',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-site',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
        'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
    }

    json_data = {
        'partner_id': 'web',
        'timestamp': 1710751467467,
        'param': {
            'searchType': 'article',
            'searchWord': keyword,
            'sort': 'score',
            'pageSize': 20,
            'pageEvent': 1,
            'pageCallback': 'eyJmaXJzdElkIjo5NSwibGFzdElkIjo1MSwiZmlyc3RDcmVhdGVUaW1lIjo3NTU4MSwibGFzdENyZWF0ZVRpbWUiOjIzOTk3LCJsYXN0UGFyYW0iOiJ7XCJwcmVQYWdlXCI6MSxcIm5leHRQYWdlXCI6MixcInBhZ2VOb1wiOjEsXCJwYWdlU2l6ZVwiOjIwLFwidG90YWxQYWdlXCI6MTAsXCJ0b3RhbENvdW50XCI6MjAwfSJ9',
            'siteId': 1,
            'platformId': 2,
        },
    }

    response = requests.post(
        'https://gateway.36kr.com/api/mis/nav/search/resultbytype',
        headers=headers,
        json=json_data,
    )
    
    data = response.json()
    for parsed_data  in data['data']['itemList']:
        widget_title = parsed_data['widgetTitle'].replace('<em>', '').replace('</em>', '')
        print(widget_title)
        widget_url = parsed_data['route']
        print(widget_url)
        
get_article_search('OpenAI')
get_article_url('我要')

get_article_searchget_article_url。這兩個函數都是用來從36氪網站上獲取文章信息的。

  1. get_article_search(keyword):
    • 首先,將關鍵詞進行URL編碼。
    • 構建搜索URL并發(fā)送GET請求獲取頁面內容。
    • 使用lxml庫的etree模塊解析HTML內容。
    • 使用XPath定位元素,提取文章標題和URL連接。
  2. get_article_url(keyword):
    • 函數中定義了請求頭(headers)和請求體(json_data)。
    • 發(fā)送POST請求到指定的API接口獲取文章URL數據。
    • 解析返回的JSON數據,提取文章標題和URL連接。

總結

在這篇文章中,我們深入學習了XPath作為一種常見的網絡爬蟲技巧。XPath是一種用于定位和選擇XML文檔中特定部分的語言,盡管最初是為XML設計的,但同樣適用于HTML文檔的解析。我們探討了如何使用XPath來定位元素并提取所需信息。

通過這篇文章的學習,我們對XPath的應用有了更深入的了解,也提升了我們在網絡爬蟲領域的技能。繼續(xù)努力學習和實踐,相信我們可以在爬蟲技術上取得更大的進步!文章來源地址http://www.zghlxwxcb.cn/news/detail-841981.html

到了這里,關于爬蟲實戰(zhàn):探索XPath爬蟲技巧之熱榜新聞的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【爬蟲實戰(zhàn)】用python爬今日頭條熱榜TOP50榜單!

    【爬蟲實戰(zhàn)】用python爬今日頭條熱榜TOP50榜單!

    目錄 一、爬取目標 二、爬取結果 三、代碼講解 四、技術總結 五、演示視頻 六、附完整源碼 您好!我是@馬哥python說,一名10年程序猿。 今天分享一期爬蟲案例,爬取的目標是:今日頭條熱榜的榜單數據。 打開今日頭條 首頁,在頁面右側會看到頭條熱榜,如下: 爬取以上

    2024年02月08日
    瀏覽(69)
  • 初級爬蟲實戰(zhàn)——伯克利新聞

    初級爬蟲實戰(zhàn)——伯克利新聞

    前些天發(fā)現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家?!緦毑厝肟凇?。 爬取 https://news.berkeley.edu/ 的字段,包含標題、內容,作者,發(fā)布時間,鏈接地址,文章快照 (可能需要翻墻才能訪問) 我們可以按照新聞模塊、版面、和文章對網頁信息

    2024年03月14日
    瀏覽(25)
  • 〖Python網絡爬蟲實戰(zhàn)?〗- XPATH語法介紹

    訂閱:新手可以訂閱我的其他專欄。免費階段訂閱量1000+ ????????????????python項目實戰(zhàn) ???????????????? Python編程基礎教程系列(零基礎小白搬磚逆襲) 說明:本專欄持續(xù)更新中,目前專欄免費訂閱,在轉為付費專欄前訂閱本專欄的,可以免費訂閱付費專欄,

    2023年04月14日
    瀏覽(134)
  • Python爬蟲實戰(zhàn)——爬取新聞數據(簡單的深度爬蟲)

    Python爬蟲實戰(zhàn)——爬取新聞數據(簡單的深度爬蟲)

    ? ? ? ? 又到了爬新聞的環(huán)節(jié)(好像學爬蟲都要去爬爬新聞,沒辦法誰讓新聞一般都很好爬呢XD,拿來練練手),只作為技術分享,這一次要的數據是分在了兩個界面,所以試一下深度爬蟲,不過是很簡單的。 ?網頁url 1.先看看網站網址的規(guī)律 ?發(fā)現這部分就是每一天的新聞

    2024年02月11日
    瀏覽(20)
  • 初級爬蟲實戰(zhàn)——麻省理工學院新聞

    初級爬蟲實戰(zhàn)——麻省理工學院新聞

    前些天發(fā)現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家?!緦毑厝肟凇?。 爬取 news.mit.edu 的字段,包含標題、內容,作者,發(fā)布時間,鏈接地址,文章快照 (可能需要翻墻才能訪問) 1.全部新聞大致分為4個模塊 2.每個模塊的標簽列表大致如下

    2024年03月14日
    瀏覽(27)
  • python爬蟲實戰(zhàn)(1)--爬取新聞數據

    python爬蟲實戰(zhàn)(1)--爬取新聞數據

    想要每天看到新聞數據又不想占用太多時間去整理,萌生自己抓取新聞網站的想法。 使用python語言可以快速實現,調用 BeautifulSoup 包里面的方法 安裝BeautifulSoup 完成以后引入項目 定義請求頭,方便把請求包裝成正常的用戶請求,防止被拒絕 定義被抓取的url,并請求加上請求

    2024年02月13日
    瀏覽(31)
  • Python爬蟲實戰(zhàn)——Lazada商品數據(selenium自動化爬蟲,xpath定位)

    Python爬蟲實戰(zhàn)——Lazada商品數據(selenium自動化爬蟲,xpath定位)

    ? ? ? ? 在此說明,這個項目是我第一次真正去爬的一個網站,里面寫的代碼我自己都看不下去,但是已經不想花時間去重構了,所以看個樂呵就好,要噴也可以(下手輕一點)。這篇文算是記錄我的學習中出現的一些問題,不建議拿來學習和真拿我的代碼去爬Lazada的數據,

    2024年02月02日
    瀏覽(22)
  • 初級爬蟲實戰(zhàn)——哥倫比亞大學新聞

    初級爬蟲實戰(zhàn)——哥倫比亞大學新聞

    前些天發(fā)現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家?!緦毑厝肟凇俊?爬取 news.columbia.edu 的字段,包含標題、內容,作者,發(fā)布時間,鏈接地址,文章快照 (可能需要翻墻才能訪問) 按照如下步驟,找到全部新聞 為了規(guī)范爬取的命名與邏

    2024年03月27日
    瀏覽(19)
  • Python爬蟲實戰(zhàn)之爬淘寶商品--selenium+Xpath

    Python爬蟲實戰(zhàn)之爬淘寶商品--selenium+Xpath

    代碼鏈接 利用selenium來自動翻頁爬取淘寶商品的標題,價格,銷量,產地信息。 導入庫: 注意自己配置好python環(huán)境(谷歌驅動…) 利用selenium,手動登錄獲取cookie保存在本地用于登錄平臺(便于測試代碼),訪問商品頁url通過Xpath選中對象拿數據,翻頁,通過Xpath選中對象拿數據,翻頁

    2024年02月04日
    瀏覽(25)
  • 【Python爬蟲開發(fā)實戰(zhàn)①】使用urllib以及XPath爬取可愛小貓圖片

    【Python爬蟲開發(fā)實戰(zhàn)①】使用urllib以及XPath爬取可愛小貓圖片

    個人主頁 :為夢而生~ 關注我一起學習吧! 專欄 :python網絡爬蟲從基礎到實戰(zhàn) 歡迎訂閱!后面的內容會越來越有意思~ 往期推薦 : 【Python爬蟲開發(fā)基礎⑦】urllib庫的基本使用 【Python爬蟲開發(fā)基礎⑧】XPath庫及其基本用法 我們在之前已經有8篇文章講述基礎知識了,下面我們

    2024年02月11日
    瀏覽(168)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包