糗事百科案例(使用 xpath模組)

wanghandou發表於2017-10-25

通過一個案列先了解下json與python之間的轉換關係

#json解析庫,對應到lxml
import json
#json的解析語法,對應到xpath
import jsonpath
import urllib2

url="http://www.lagou.com/lbs/getAllCitySearchLabels.json"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"}
request=urllib2.Request(url,headers=headers)
response=urllib2.urlopen(request)
#返回json檔案裡面的內容,返回的格式是字串
html=response.read()
# print html.encode("gb18030")
#把json轉換成python格式的unicode字串
unicodestr=json.loads(html)

city_list=jsonpath.jsonpath(unicodestr,"$..name")#從當前節點的任意位置匹配name,返回一個列表
# for i in city_list:
	# print i

#dumps預設中文為ascii編碼格式
#把python格式的轉換為json格式的,返回的是unicode字串
#禁用ascii編碼格式,返回的unicode字串,方便使用(轉碼)
array=json.dumps(city_list,ensure_ascii=False)
with open("city_list.txt","w") as f:
	f.write(array.encode("gb18030"))

爬糗事百科獲取每個段子的使用者名稱,每個段子中的圖片,還有每個段子的內容,每個段子的點贊人數還有評論人數

# https://www.qiushibaike.com/8hr/page/3/
# //div[contains(@id,"qiushi_tag")]
# 段子名字
# .//h2[1]#在當前節點下找,所以直接是.就行
# 點贊人數
# ./div/span/i
# 評論人數
# ./div/span/a/i
# 段子內容
# .//div[@class="content"]/span
# 圖片連結
# .//div[@class="thumb"]//@src
import urllib2
import json
from lxml import etree

url="https://www.qiushibaike.com/8hr/page/3/"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"}
request=urllib2.Request(url,headers=headers)
response=urllib2.urlopen(request)
html=response.read()
#把htmll轉換成html dom
text=etree.HTML(html)
#返回所有 段子的節點位置,contains()模糊查詢方法,第一個引數是要匹配的標籤,第二個引數是標籤名部分內容
node_list=text.xpath('//div[contains(@id,"qiushi_tag")]')
data={}
for node in node_list:
	#使用者名稱
	username=(node.xpath(".//h2"))[0].text#因為node.xpath(".//h2")返回的是列表,裡面裝的是content,因為一個段子只有一個content,所以這個列表裡面就有一個content,我們用[0],把這個content取出來
	#段子內容(取出標籤下的內容,所以要加text)
	content=(node.xpath('.//div[@class="content"]/span'))[0].text
	#取出標籤下的內容,點讚的人數
	dianzan=(node.xpath('./div/span/i'))[0].text
	#評論的內容
	pinglun=(node.xpath('./div/span/a/i'))[0].text
	#段子中圖片的url
	img=(node.xpath('.//div[@class="thumb"]//@src'))
	if len(img)>=1:
		img="http:"+img[0]
	data={"username":username,
	"content":content,
	"dianzan":dianzan,
	"pinglun":pinglun,
	"img":img}
	we=json.dumps(data,ensure_ascii=False)#把python格式的轉換為json格式,此時轉換成了字串,就可以寫入糗事段子.txt檔案中了
	with open(u"糗事段子.txt","a") as f:
		f.write(we+'\n')#每個段子之間換行



相關文章