這一學期我們的python課又課程設計,得做一個程序然後進行答辯,今天我就在線上進行了答辯,我的選題選的是爬蟲,用xpath方法進行爬取百度的圖片。我把我的答辯經過和老師提問的問題來大概描述一下
首先我的老師在爬蟲的專業知識上只問了一個headers的用法。我說是一個簡單的反爬,要不然浏覽器會禁止這個爬蟲訪問,這個回答有點小問題就是應該是服務器會禁止爬蟲去訪問而不是浏覽器,之後他問了一下這個use_agent在哪裡能找到,可能是我在前端方面講的也多,我甚至寫了一個前端的小頁面來闡述html的一些知識
老師還是問了一些基礎知識,比如說文件的寫入方式,這個真的是好久沒有管了然後答的不怎麼樣
因為我用的是with open來寫入文件的,老師問了一個with的用法,它是干什麼的,這個屬實是知識盲區了 with的作用就是自動調用close()方法
之後老師問了後面的‘wb’是什麼意思:以二進制寫入文件,還有w之類的大家也可以復習一下
我這裡還調用了os模塊,在之前的幾個同學裡也了os模塊的幾個操作
最後因為線上答辯,只有五個問題,其中三個關於代碼的問題,還是可以的,最後附上源碼
#導入模塊
import requests
import os
from lxml import etree
#利用os模塊創建文件
if not os.path.exists("G:\python課程設計\debug"):
os.mkdir("G:\python課程設計\debug")
url = 'https://pic.netbian.com/4kdongwu/' #獲取頁面網址
#簡單的反爬,使用headers將爬蟲偽裝起來
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62'
}
response = requests.get(url=url,headers=headers)#使用request.get方法獲取html頁面
page_text = response.text #獲取html頁面中的文本內容
tree = etree.HTML(page_text) #調用HTML類對HTML文本進行初始化,成功構造XPath解析對象
li_list = tree.xpath('//div[@class="slist"]/ul/li') #利用html知識進行定位
for li in li_list :
img_src = 'http://pic.netbian.com' + li.xpath('./a/img/@src')[0] #在li標簽下再次定位到圖片
img_name = li.xpath('./a/img/@alt')[0] + 'jpg' #獲取圖片名稱
img_name = img_name.encode('iso-8859-1').decode('gbk') #解決亂碼問題
img_data = requests.get(url=img_src,headers=headers).content #爬取圖片
img_path ='G:\\python課程設計\\debug\\'+img_name #獲取圖片路徑
with open(img_path,'wb') as fp: #將爬取到的文件寫入文件夾
fp.write(img_data)
print(img_name,'over'
最後這幾天還有線性代數,高等數學,c語言,大學物理。今天剛剛把答辯和思修考完,很忙很忙,原諒更新慢,暑假再肝,謝謝大家支持。