亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python爬蟲的兩套解析方法和四種爬蟲實現

發布時間:2020-08-11 09:03:02 來源:ITPUB博客 閱讀:208 作者:趙鈺瑩 欄目:編程語言

【本文轉載自微信公眾號數據科學家養成記,作者:louwill,轉載授權請聯系原作者】 

對于大多數朋友而言,爬蟲絕對是學習
python的最好的起手和入門方式。因為爬蟲思維模式固定,編程模式也相對簡單,一般在細節處理上積累一些經驗都可以成功入門。本文想針對某一網頁對python基礎爬蟲的兩大解析庫(BeautifulSouplxml)和幾種信息提取實現方法進行分析,以開python爬蟲之初見。

基礎爬蟲的固定模式

筆者這里所談的基礎爬蟲,指的是不需要處理像異步加載、驗證碼、代理等高階爬蟲技術的爬蟲方法。一般而言,基礎爬蟲的兩大請求庫urllibrequestsrequests通常為大多數人所鐘愛,當然urllib也功能齊全。兩大解析庫BeautifulSoup因其強大的HTML文檔解析功能而備受青睞,另一款解析庫lxml在搭配xpath表達式的基礎上也效率提高。就基礎爬蟲來說,兩大請求庫和兩大解析庫的組合方式可以依個人偏好來選擇。


筆者喜歡用的爬蟲組合工具是:

  • requests+BeautifulSoup

  • requests+lxml


同一網頁爬蟲的四種實現方式

    筆者以騰訊新聞首頁的新聞信息抓取為例。
    首頁外觀如下:

Python爬蟲的兩套解析方法和四種爬蟲實現


比如說我們想抓取每個新聞的標題和鏈接,并將其組合為一個字典的結構打印出來。首先查看HTML源碼確定新聞標題信息組織形式。

Python爬蟲的兩套解析方法和四種爬蟲實現


可以目標信息存在于em標簽下a標簽內的文本和href屬性中。可直接利用requests庫構造請求,并用BeautifulSoup或者lxml進行解析。

  • 方式一:requests+BeautifulSoup+select# select method import requests from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'} url = 'http://news.qq.com/' Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml') em = Soup.select('em[class="f14 l24"] a') for i in em:    title = i.get_text()    link = i['href']    print({'標題': title,           '鏈接': link    })

     很常規的處理方式,抓取效果如下:

    Python爬蟲的兩套解析方法和四種爬蟲實現


    • 方式二:requests+BeautifulSoup+find_all進行信息提取

    # find_all method import requests from bs4 import BeautifulSoup
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
    url = 'http://news.qq.com/' Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode("utf-8"), 'lxml')
    em = Soup.find_all('em', attrs={'class': 'f14 l24'})for i in em:
        title = i.a.get_text()
        link = i.a['href']
        print({'標題': title,            '鏈接': link
        })

    同樣是requests+BeautifulSoup的爬蟲組合,但在信息提取上采用了find_all的方式。效果如下:

    Python爬蟲的兩套解析方法和四種爬蟲實現


    • 方式三:requests+lxml/etree+xpath表達式

    # lxml/etree method import requests from lxml import etree
    
    headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
    url = 'http://news.qq.com/' html = requests.get(url = url, headers = headers)
    con = etree.HTML(html.text)
    
    title = con.xpath('//em[@class="f14 l24"]/a/text()')
    link = con.xpath('//em[@class="f14 l24"]/a/@href') for i in zip(title, link):
        print({'標題': i[0],
               '鏈接': i[1]
        })

    使用lxml庫下的etree模塊進行解析,然后使用xpath表達式進行信息提取,效率要略高于BeautifulSoup+select方法。這里對兩個列表的組合采用了zip方法。效果如下:

    Python爬蟲的兩套解析方法和四種爬蟲實現


    • 方式四:requests+lxml/html/fromstring+xpath表達式

    # lxml/html/fromstring method import requests import lxml.html as HTML
    
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}
    url = 'http://news.qq.com/' con = HTML.fromstring(requests.get(url = url, headers = headers).text)
    title = con.xpath('//em[@class="f14 l24"]/a/text()')
    link = con.xpath('//em[@class="f14 l24"]/a/@href') for i in zip(title, link):
        print({'標題': i[0],'鏈接': i[1]
        })

    跟方法三類似,只是在解析上使用了lxml庫下的html.fromstring模塊。抓取效果如下:

    Python爬蟲的兩套解析方法和四種爬蟲實現


    很多人覺得爬蟲有點難以掌握,因為知識點太多,需要懂前端、需要python熟練、還需要懂數據庫,更不用說正則表達式、XPath表達式這些。其實對于一個簡單網頁的數據抓取,不妨多嘗試幾種抓取方案,舉一反三,也更能對python爬蟲有較深的理解。長此以往,對于各類網頁結構都有所涉獵,自然經驗豐富,水到渠成。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四会市| 抚远县| 平遥县| 九龙坡区| 若尔盖县| 彭山县| 古田县| 安吉县| 和硕县| 天柱县| 九台市| 洛隆县| 哈尔滨市| 宜良县| 东山县| 玛沁县| 正阳县| 卓尼县| 富裕县| 大丰市| 上饶县| 遂溪县| 乐山市| 那曲县| 锦屏县| 海丰县| 南漳县| 自治县| 马边| 荥经县| 鲁山县| 苍南县| 富裕县| 霍州市| 吴旗县| 桃江县| 黑龙江省| 洛南县| 射阳县| 南郑县| 盖州市|