糗事百科案例(使用 xpath模組)
通過一個案列先了解下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')#每個段子之間換行
相關文章
- python爬取糗事百科Python
- Python爬取糗事百科段子Python
- python爬蟲十二:middlewares的使用,爬取糗事百科Python爬蟲
- [外掛擴充套件]糗事百科QiuBa套件
- python多執行緒爬去糗事百科Python執行緒
- 仿的一個笑話網站 糗事百科網站
- python3.6.5 爬取糗事百科,開心一下Python
- 網路爬蟲——專案實戰(爬取糗事百科所有文章)爬蟲
- Golang語言之Prometheus的日誌模組使用案例GolangPrometheus
- 仿糗事百科笑話系統原始碼,PHP笑話系統原始碼原始碼PHP
- 基於 go + xpath 爬蟲小案例Go爬蟲
- 使用typescript開發angular模組(編寫模組)TypeScriptAngular
- 測試工具-XPath使用
- pymysql模組的使用MySql
- wtforms模組的使用ORM
- 3568F-物聯網模組開發案例
- 爬蟲之xpath的使用爬蟲
- python使用xpath(超詳細)Python
- glom模組的使用(一)
- glom模組的使用(二)
- Paramiko模組簡單使用
- Python中模組的使用Python
- openpyxl模組的日常使用
- Flask:sqlalchemy模組的使用FlaskSQL
- Python logging模組的使用Python
- 插片式遠端 IO模組:雙通道PNP和NPN高速計數模組案例說明
- 序列化模組,隨機數模組,os模組,sys模組,hashlib模組隨機
- Python 中argparse模組的使用Python
- 如何使用`open-uri`模組
- Nginx使用SSL模組配置httpsNginxHTTP
- python inspect模組簡單使用Python
- python logging模組使用總結Python
- odoo的Aeroo Reports模組使用。Odoo
- Python模組 adorner 的使用示例Python
- BeautifulSoup模組的使用方法
- 使用Leaflet建立地圖模組地圖
- 爬蟲-urllib模組的使用爬蟲
- python 模組:itsdangerous 模組Python
- path模組 fs模組