1. 程式人生 > >爬蟲day04 xpath,私密代理

爬蟲day04 xpath,私密代理

目錄

存入csv檔案

    1.csv模組的使用流程         1.Python語句開啟csv檔案:             with open("測試.csv","a") as f:                 pass         2.初始化寫入物件             writer方法:writer = csv.writer(f)         3.寫入資料             writerow()方法:writer.writerow([])     2.示例        

        import csv
        with open("測試.csv","a",newline="") as f:
            # 初始化寫入物件
            writer = csv.writer(f)  
            # 寫入資料 writer.writerow([])
            writer.writerow(["id","name","age"])
            writer.writerow(["1","Lucy","20"])
            writer.writerow(["2","Tom","25"])

2.Xpath 工具(解析html)

    1.Xpath         在XML文件中查詢資訊的語言,同樣適用於HTML文件的檢索     2.Xpath輔助工具         1.Chrome外掛:XPath Helper             開啟/關閉:Ctrl+Shift+大寫X         2.FireFox外掛:Xpath checker         3.XPath表示式編輯工具:XML Quire     3.XPath匹配規則         1.匹配演示             1.查詢bookstore下面的所有節點: /bookstore             2.查詢所有book節點: //book             3.查詢所有book節點下title節點中,lang屬性為"en"的節點://book/title[@lang="en"]         2.選取節點             / : 從根節點開始選取 /bookstore             //: 從整個文件中查詢某個節點 //price             @ : 選取某個節點的屬性 //title[@lang="en"]         

[email protected]使用             1.選取1個節點://title[@lang="en"]             2.選取n個節點://title[@lang]             3.選取某個節點的屬性值://title/@lang         4.匹配多路徑             1.符號: |             2.示例                 獲取所有book節點下的title節點和price節點                 //book/title | //book/price         5.函式             contatins() : 匹配1個屬性值中包含某些字串的節點             //title[contains(@lang,"e")]

3.解析HTML原始碼

        1.lxml庫:HTML/XML解析庫         1.安裝              conda install lxml             pip install lxml

            uninsall             remove             autoremove         2.使用流程             1.利用lxml庫的etree模組構建解析物件             2.解析物件呼叫xpath工具定位節點資訊     2.使用         1.匯入模組 from lxml import etree         2.建立解析物件:parseHtml = etree.HTML(html)         3.呼叫xpath進行解析:             r_list = parseHtml.xpath('//title[@lang="en"]')         # 只要呼叫了xpath,則結果一定是列表     3.示例+練習     4.案例:抓取百度貼吧帖子裡面的圖片         1.目標:抓貼吧中帖子圖片         2.思路             1.獲取貼吧主頁URL:美女吧 下一頁:URL規律             2.獲取美女吧中每個帖子的URL             3.對每個帖子發請求,獲取帖子裡所有圖片的URL             4.對圖片URL發請求,以wb的方式寫入本地檔案         3.步驟             1.獲取貼吧的URL                 http://tieba.baidu.com/f? + 一堆查詢引數                 pn = (page-1)*50             2.獲取每個帖子的URL                 http://tieba.baidu.com + /p/5866881218                 //div[@class="threadlist_title pull_left j_th_tit "]/a/@href             3.開啟每個帖子                 http://imgsrc.baidu.com/forum/w%3D580/sign=8bac1b1a10950a7b75354ecc3ad0625c/3c0bddc451da81cbfe7fc3e15f66d016082431e2.jpg

                xpath匹配 //img[@class="BDE_Image"]/@src             4.儲存到本地

4.ProxyBasicAuthHandler私密代理Handler處理器

    1.密碼管理器使用流程         1.建立密碼管理器物件             pwd = urllib.request.HTTPPasswordMgrWithDefaultRealm()         2.新增私密代理使用者名稱,密碼,IP地址,埠資訊             pwd.add_password(None,"IP:埠","使用者名稱","密碼")     1.urllib.request.ProxyBasicAuthHandler(密碼管理器物件)

作業:   1. 內涵段子 : xpath   2. 貓眼電影 : xpath匹配,本地csv檔案中

xpath示例

from lxml import etree

html = """<div class="wrapper">
	<i class="iconfont icon-back" id="back"></i>
	<a href="/" id="channel">新浪社會</a>
	<ul id="nav">
		<li><a href="http://domestic.firefox.sina.com/" title="國內">國內</a></li>
		<li><a href="http://world.firefox.sina.com/" title="國際">國際</a></li>
		<li><a href="http://mil.firefox.sina.com/" title="軍事">軍事</a></li>
		<li><a href="http://photo.firefox.sina.com/" title="圖片">圖片</a></li>
		<li><a href="http://society.firefox.sina.com/" title="社會">社會</a></li>
		<li><a href="http://ent.firefox.sina.com/" title="娛樂">娛樂</a></li>
		<li><a href="http://tech.firefox.sina.com/" title="科技">科技</a></li>
		<li><a href="http://sports.firefox.sina.com/" title="體育">體育</a></li>
		<li><a href="http://finance.firefox.sina.com/" title="財經">財經</a></li>
		<li><a href="http://auto.firefox.sina.com/" title="汽車">汽車</a></li>
	</ul>
	<i class="iconfont icon-liebiao" id="menu"></i>
</div>"""
# 1.構建解析物件
parseHtml = etree.HTML(html)
# 2.解析物件呼叫 xpath 工具
# 獲取所有a標籤的 href屬性值
r_list = parseHtml.xpath('//a/@href')
#for i in r_list:
#    print(i)
    
# 獲取 / 
r_list = parseHtml.xpath('//a[@id="channel"]/@href')
#print(r_list)
# 獲取 非 /
#r_list = parseHtml.xpath('//ul[@id="nav"]/li/a/@href')

r_list = parseHtml.xpath('//ul[@id="nav"]//a/@href')
#print(r_list)
# 獲取所有<a>節點的文字內容
r_list = parseHtml.xpath('//a')
# 得到的是元素物件,需要用 物件名.text 獲取內容
#for i in r_list:
#    print(i.text)
# 獲取 新浪社會
r_list = parseHtml.xpath('//a[@id="channel"]')
#for i in r_list:
#    print(i.text)
# 獲取非 新浪社會 的節點文字
r_list = parseHtml.xpath('//ul[@id="nav"]//a')
for i in r_list:
    print(i.text)