使用lxml爬取網頁的一些心得

準備工作

一般是用requests獲取頁面內容。

def get_page(url):
    headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}
    re = requests.get(url, headers=headers)
    html = re.text
    return html

獲取一個樹對象

tree = etree.HTML(page)

對樹對象進行操作

etree.html返回的是一個elementtree。對這個樹進行操作的文檔很少,還沒有仔細研究。
對這個樹進行XPATH選取操作後會形成一個列表。列表的每一項是一個element對象。
element對象可以進行如何操作:

  • 如果要提取這個對象,比如一個塊,以及它下面的所有內容,可以用輸出的方式。這種方式特別適合爬取一個網頁的部分內容,可以把內容和格式一起爬下來。目前發現保存的文件是ASCII碼,還不知道如何轉換,但在瀏覽器中顯示是正確的。
etree.tostring(tree)
#to a string
etree.ElementTree(tree).write()
#output as a file
  • 可以對這個對象進行操作,如修改文本,屬性等。
    • 比如把一個標籤時的相對地址換成絕對地址等。
    • 提取A標籤中的鏈接等。

這兩種操作基本上可以進行網頁內容的爬取了。現在還沒有搞明白的是編碼的問題,爲什麼爬取下來的HTML文件中文無法在編輯器里正確顯示(在瀏覽器裏是正常的)。

已經找到解決辦法了,和tostring()方法一樣,就是加一個ENCODING=“UTF-8”的參數就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章