網絡爬蟲--12.【XPath實戰】獲取百度貼吧中的圖片

用XPath來做一個簡單的爬蟲,我們嘗試爬取某個貼吧里的所有帖子,并且將該這個帖子里每個樓層發布的圖片下載到本地。

#coding=utf-8
import requests
from lxml import etree
import jsonclass Tieba:def __init__(self,tieba_name):self.tieba_name = tieba_name #接收貼吧名#設置為手機端的UAself.headers = {"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"}def get_total_url_list(self):'''獲取所有的urllist'''url = "https://tieba.baidu.com/f?kw="+self.tieba_name+"&ie=utf-8&pn={}&"url_list = []for i in range(100): #通過循環拼接100個urlurl_list.append(url.format(i*50))return url_list #返回100個url的urllistdef parse_url(self,url):'''一個發送請求,獲取響應,同時etree處理html'''print("parsing url:",url)response = requests.get(url,headers=self.headers,timeout=10) #發送請求html = response.content.decode() #獲取html字符串html = etree.HTML(html) #獲取element 類型的htmlreturn htmldef get_title_href(self,url):'''獲取一個頁面的title和href'''html = self.parse_url(url)li_temp_list = html.xpath("//li[@class='tl_shadow']") #分組,按照li標簽分組total_items = []for i in li_temp_list: #遍歷分組href = "https:"+i.xpath("./a/@href")[0] if len(i.xpath("./a/@href"))>0 else Nonetext = i.xpath("./a/div[1]/span[1]/text()")text = text[0] if len(text)>0 else Noneitem = dict(  #放入字典href = href,text = text)total_items.append(item)return total_items #返回一個頁面所有的itemdef get_img(self,url):'''獲取一個帖子里面的所有圖片'''html = self.parse_url(url) #返回elemet累心的html,具有xpath方法img_list = html.xpath('//div[@data-class="BDE_Image"]/@data-url')img_list = [i.split("src=")[-1] for i in img_list] #提取圖片的urlimg_list = [requests.utils.unquote(i) for i in img_list]return img_listdef save_item(self,item):'''保存一個item'''with open("teibatupian.txt","a") as f:f.write(json.dumps(item,ensure_ascii=False,indent=2))f.write("\n")def run(self):#1、找到了url規律,url listurl_list = self.get_total_url_list()for url in url_list:#2、遍歷urllist 發送請求,獲得響應,etree處理html# 3、提取title,hreftotal_item = self.get_title_href(url)for item in total_item:href = item["href"]img_list = self.get_img(href) #獲取到了帖子的圖片列表item["img"] = img_list# 4、保存到本地print(item)self.save_item(item)if __name__ == "__main__":tieba = Tieba("貓")tieba.run()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452021.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452021.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

合并分ER圖產生的沖突

合并分E-R圖 各個局部應用所面向的問題不同,各個子系統的E-R圖之間必定會存在許多不一致的地方,稱之為沖突。 子系統E-R圖之間的沖突主要有三類: ①屬性沖突 ②命名沖突 ③結構沖突①屬性沖突 屬性域沖突,即屬性值的類型、取值范圍…

8.類定義、屬性、初始化和析構

類定義 類 是一個獨立存放變量(屬性/方法)的空間 封裝: 類可以把各種對象組織在一起,作為類的屬性,通過 . (點)運算符來調用類中封裝好的對象 屬性: 變量在類中稱為屬性,但是類中的屬性不僅僅只包含變量&#x…

GPL以及Copyleft協議使用率下降明顯

根據最新的協議數據分析,不光是GPL,另外一些copyleft(AGPL,LGPL 等等)協議的使用率在不斷下降,并且下降的速度越來越快。 這結果是在意料之中的,因為GPL非常的復雜。越來越多的個人和企業將選擇…

概念模型和關系模型

ER模型(邏輯模型) ER模型的基本元素是:實體、聯系和屬性 實體:是一個數據對象,指應用中可以區別的客觀存在的事物。(ER模型中的實體往往是指實體集) 實體集:指同一類實體構成的集合…

iOS AutoLayout使用技巧

關于ContentCompressionResistance, ContentHugging運用 如下圖效果圖,兩個Label并列在同一排上,左邊label自適應,右邊label(紅色)要使得內容全部展示,如果左邊label內容很少,那么右…

網絡爬蟲--13.數據提取之JSON與JsonPATH

文章目錄一. 前言二. JSON三. json.loads()四. json.dumps()五. json.dump()六. json.load()七. JsonPath八. JsonPath與XPath語法對比九. 案例分析一. 前言 JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,它使得人們很容易的進行閱讀和編寫。同時…

vs2017生成sqlserver 2017項目出現.Net SqlClient Data Provider: Msg 10343

一、使用vs2017生成sqlserver 2017項目時由于添加的程序集(CLR集成,可以參考后面給出的鏈接進行理解) ,由于安全權限的配置不正確引發以下的問題: SQL72014: .Net SqlClient Data Provider: Msg 10343, Level 14, State 1, Line 1 針對帶有 SAFE 或 EXT…

數據庫系統常用的存取方法

1. B樹索引存取方法 2. Hash索引存取方法 3. 聚簇存取方法

創建型模式二:工廠方法模式

1. 工廠模式介紹 工廠模式(Factory Pattern)的意義就跟它的名字一樣,在面向對象程序設計中,工廠通常是一個用來創建其他對象的對象。工廠模式根據不同的參數來實現不同的分配方案和創建對象。 在工廠模式中,我們在創建…

spring 的4種事務管理(1種編程式+3種聲明式)

見:http://blog.csdn.net/sinat_25926481/article/details/48208619 Spring的4種事務管理(1種編程式事務三種聲明事務) 一、Spring事務的介紹 二、編程式事務xml的配置 注入后直接在service層調用模板的方法使用 三、基于AOP方式的聲明式事務…

如何創造出更優秀的用戶體驗?

對于互聯網公司來說,用戶體驗起到至關重要的作用,能否給用戶留下深刻的印象;開發出的產品是否實用、易用?等等這些都是開發者必將思考的話題。當有用性一樣的時候,大家的競爭重點就是易用性了,這就是互聯網…

java并發編程實戰-第三章-對象的共享

3.1可見性 首先我們需要知道的是,java的線程都有自己獨立的緩存,線程之間進行共享變量的交互是通過自身和緩存和主存的交互實現的。如果線程的每次更改緩存都刷入主存,主存每次被一個線程的緩存修改,都通知所有的線程刷新自身的緩…

GitHub(從安裝到使用)

一、安裝Git for Windows(又名msysgit) 下載地址: https://git-for-windows.github.io/ 在官方下載完后,安裝到Windows Explorer integration的時候,將選項中將“Git Bash here”和“Git GUI here”打對勾。 然后就一直next直到Fi…

Spring事務配置的五種方式和spring里面事務的傳播屬性和事務隔離級別、不可重復讀與幻讀的區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 spring事務配置的五種方式 前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過&#x…

Google編程之夏入圍項目公布

Google編程之夏(Google Summer of Code),是由Google公司所主辦的年度程式設計比賽,第一屆從2005年開始。“Summer of Code”之名取自1967年的“夏日之愛”(Summer of Love)風潮。比賽的主要目的是鼓勵學生參…

普通索引 唯一索引 主鍵索引 候選索引

普通索引 最基本的索引類型&#xff0c;沒有唯一性之類的限制。普通索引可以通過以下幾種方式創建&#xff1a; 創建索引&#xff0c;例如CREATE INDEX <索引的名字> ON tablename (列的列表)&#xff1b; 修改表&#xff0c;例如ALTER TABLE tablename ADD INDEX [索引…

Android 基于注解IOC組件化/模塊化的架構實踐

當前參與的項目歷史也很久遠&#xff0c;第一行代碼據說是寫于2014年的某一天&#xff0c;那時Android用的ide還是Eclipse、那時Android還沒有很好的架構指導&#xff08;mvp、mvvm&#xff09;、那時Android最新的版本是5.0、那時Android的Material Design還沒流行……背景隨著…

網絡爬蟲--14.【糗事百科實戰】

文章目錄一. 要求二. 參考代碼一. 要求 爬取糗事百科段子&#xff0c;假設頁面的URL是 http://www.qiushibaike.com/8hr/page/1 使用requests獲取頁面信息&#xff0c;用XPath / re 做數據提取 獲取每個帖子里的用戶頭像鏈接、用戶姓名、段子內容、點贊次數和評論次數 保存到…

bzoj 5369: [Pkusc2018]最大前綴和

Description 小C是一個算法競賽愛好者&#xff0c;有一天小C遇到了一個非常難的問題&#xff1a;求一個序列的最大子段和。 但是小C并不會做這個題&#xff0c;于是小C決定把序列隨機打亂&#xff0c;然后取序列的最大前綴和作為答案。 小C是一個非常有自知之明的人&#xff0c…

微軟:軟件帝王的復興之路

可以說在過去的兩個月IT界所發生的一切都非同尋常&#xff0c;喬布斯辭職了&#xff0c;Google把Motorola并購了&#xff0c;微軟炫了一下Windows 8&#xff0c;還宣布開始用ARM了&#xff0c;Google開始和英特爾合作了&#xff0c;AT&T與T-Mobile的并購也在緊密鑼鼓進行中…