1. 程式人生 > 程式設計 >python3 xpath和requests應用詳解

python3 xpath和requests應用詳解

根據一個爬取豆瓣電影排名的小應用,來簡單使用etree和request庫。

etree使用xpath語法。

import requests
import ssl
from lxml import etree


ssl._create_default_https_context = ssl._create_unverified_context

session = requests.Session()
for id in range(0,251,25):
 URL = 'https://movie.douban.com/top250/?start=' + str(id)
 req = session.get(URL)
 # 設定網頁編碼格式
 req.encoding = 'utf8'
 # 將request.content 轉化為 Element
 root = etree.HTML(req.content)
 # 選取 ol/li/div[@class="item"] 不管它們在文件中的位置
 items = root.xpath('//ol/li/div[@class="item"]')
 for item in items:
  # 注意可能只有中文名,沒有英文名;可能沒有quote簡評
  rank,name,alias,rating_num,quote,url = "","",""
  try:
   url = item.xpath('./div[@class="pic"]/a/@href')[0]
   rank = item.xpath('./div[@class="pic"]/em/text()')[0]
   title = item.xpath('./div[@class="info"]//a/span[@class="title"]/text()')
   name = title[0].encode('gb2312','ignore').decode('gb2312')
   alias = title[1].encode('gb2312','ignore').decode('gb2312') if len(title) == 2 else ""
   rating_num = item.xpath('.//div[@class="bd"]//span[@class="rating_num"]/text()')[0]
   quote_tag = item.xpath('.//div[@class="bd"]//span[@class="inq"]')
   if len(quote_tag) is not 0:
    quote = quote_tag[0].text.encode('gb2312','ignore').decode('gb2312').replace('\xa0','')
   # 輸出 排名,評分,簡介
   print(rank,quote)
   # 輸出 中文名,英文名
   print(name.encode('gb2312','ignore').decode('gb2312'),alias.encode('gb2312','ignore').decode('gb2312').replace('/',','))
  except:
   print('faild!')
   pass

程式執行結果:

python3 xpath和requests應用詳解

補充知識:requests抓取以及Xpath解析

程式碼:

# requests抓取
import requests
 
# 新浪新聞的一篇新聞的url
url = 'http://news.sina.com.cn/s/2018-05-09/doc-ihaichqz1009657.shtml'
 
res = requests.get(url)
# 檢視編碼方式
enconding = requests.utils.get_encodings_from_content(res.text)
#print(enconding)
 
 
# 列印網頁內容
html_doc = res.content.decode("utf-8")
print(html_doc[:500])
 
# 儲存網頁內容
with open('test.html','w') as f:
 f.write(html_doc)

執行結果:

<!DOCTYPE html>
<!-- [ published at 2018-05-09 18:23:13 ] -->
<!-- LLTJ_MT:name ="澎湃新聞" -->
 
<html>
<head>
<meta charset="utf-8"/>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="sudameta" content="urlpath:s/; allCIDs:51924,257,51895,200856,56264,258,38790">
<title>小學老師罰學生赤腳跑操場 官方:將按規定處理|赤腳|學生|華龍網_新浪新聞</title>
<meta name="keywords" content="赤腳,學生,華龍網" />
<meta name="tags" content="赤腳,華龍網" />
<meta name="description" content="原標題:潼南一小學體育老師罰學生赤腳跑操場續:區教委向華龍網發來情況

程式碼:

# xpath解析
from lxml import etree
 
# 建立html的樹
tree = etree.HTML(html_doc)
 
# 設定目標路徑(標題)
path_title = '/html/body//h1[@class="main-title"]//text()'
 
# 提取節點
node_title = tree.xpath(path_title)
print("===" * 20)
print(node_title[0])
 
# 設定內容路徑
path_content = '//div[@class="article-content-left"]//div[@id="article"]//text()'
 
# 提取節點
node_content = tree.xpath(path_content)
print("===" * 20)
print("。".join(node_content))

執行結果:

============================================================
小學老師罰學生赤腳跑操場 官方:將按規定處理
============================================================
 
 。  原標題:潼南一小學體育老師罰學生赤腳跑操場續:區教委向華龍網發來情況說明。
。  重慶客戶端-華龍網5月9日訊息,這兩天,重慶潼南區朝陽小學二年級6班不少家長心疼不已,因為多個娃兒腳底被磨出了泡。一問才知道,是因為有些學生體育課上沒穿運動鞋,被體育老師要求赤腳在操場上跑步。收到重慶網路問政平臺這一投訴後,華龍網記者立即進行了調查。今(9)日,華龍網釋出了。《重慶潼南一小學體育老師罰學生赤腳跑操場腳底磨出泡當地教委介入》。報道後,潼南教委高度重視並給華龍網傳來官方的情況說明。。
。 。 [說明全文]。
。  關於家長在華龍網投訴教師上體育課體罰學生的情況說明。
。  潼南區朝陽小學體育教師鄒老師於2018年5月7日上午上體育課時,發現該班有少部分名學生未按體育課的要求穿運動鞋。該教師認為,穿著涼鞋跑步對學生本人及他人存在安全隱患,塑膠跑道不會對學生光腳運動造成影響,於是就叫未穿運動鞋的學生,脫掉涼鞋進行隨班熱身跑步。當時鄒老師未發現學生有異常情況,也未接到學生有異常情況的反映。後經家長反映到學校,有極少數光著腳跑步的學生有異常情況,學校庚即與部分家長進行了溝通,並及時調查瞭解了此事,並對該教師這種不恰當教學方法進行了批評教育,我們將按相關規定對該教師作出相應的處理。。
。  重慶市潼南區教育委員會。
。  2018年5月9日。
。  來源:華龍網。
 
。責任編輯:張義凌 。

以上這篇python3 xpath和requests應用詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。