小白爬蟲入門——爬取圖片和文字(超詳細)
阿新 • • 發佈:2018-12-26
第一步 ,看網頁結構
F12開啟開發者模式,大致網頁結構如下,看圖:
下面這個圖片是針對一個tr標籤的詳解,程式碼與顯示一一對應:
第二步 ,程式碼解釋
lxml簡單使用
在自己想爬取的文字位置上單擊右鍵,選擇copy–>Xpath,即可獲得xpath內容,但需要我們稍作修改。
獲得的xpath如下:
//*[@id="gift1"]/td[4]/img
但由於id是變化的,而每項裡面的class是不變的,所以修改一下,並加上src屬性,得到:
//*[@class="gift"]/td[4]/img/@src
1、獲取文字— 以第一個td為例
title = html.xpath('//*[@class="gift"]/td[1]/text()')
2、 獲取標籤下所有文字——獲得第二個td
這裡主要是第二部分的描述,td下不僅僅是文字還有span標籤,所以如果用text()會出現許多空行並且獲取不到span下的文字,這裡要用string()
#獲得html中所有的class="gift"元素下的所有第二個td子元素
desc = html.xpath('//*[@class="gift"]/td[2]')
for i in range(0,len(desc)):
#處理元素獲得字串
descText = desc[i].xpath('string(.)' )
3、 獲取圖片
獲取img標籤中的src屬性中的內容
imgs=html.xpath('//*[@class="gift"]/td[4]/img/@src')
在讀取圖片時注意,由於爬取的圖片資訊是這種形式:../img/gifts/img1.jpg
在儲存圖片時需要改寫一下路徑
img = '../img/gifts/img1.jpg'
實際圖片路徑:
imgUrl = 'http://www.pythonscraping.com/x/'+img
`x/`只是為了多一層,名字隨便,抵消掉`../`
第三步 ,所有程式碼
匯入三個包,如果沒有該包,就pip install ,但如果pip install lxml 失敗,就看看這個 通過lxml的.whl檔案來進行安裝
import requests
from lxml import etree
import re
#文字資訊儲存在test.txt
file = open("test.txt",'w',encoding='utf-8')
url = "http://www.pythonscraping.com/pages/page3.html"
res = requests.get(url)
content = res.content
html = etree.HTML(content)
#資料解析
title = html.xpath('//*[@class="gift"]/td[1]/text()')
desc = html.xpath('//*[@class="gift"]/td[2]')
price = html.xpath('//*[@class="gift"]/td[3]/text()')
imgs=html.xpath('//*[@class="gift"]/td[4]/img/@src')
#寫入檔案
x = len(title)
for i in range(0,x):
# 描述要特別處理
descText = desc[i].xpath('string(.)')
#儲存文字資訊
file.write("第"+str(i+1)+"行資料"+"\n"+title[i]+"\n"+descText+"\n"+price[i]+"\n\n")
#下載圖片
with open('F:\PythonWork\\taobao_code\images\\'+str(i)+'.jpg', 'wb') as fd:
picture=requests.get('http://www.pythonscraping.com/x/'+imgs[i]).content
fd.write(picture)
print("成功下載%s.jpg"%i)
#關閉檔案
file.close()
總結
重點注意獲取標籤裡面所有文字內容