爬前須知
xpath解析原理:
1.實例化一個etree對象,且僅需要將被解析的頁面源碼加載到該對象中
2.調用etree對象中的xpath方法結合着xpath表達式實現標籤的定位和內容的捕獲
- 環境安裝:
pip install lxml
-分析步驟:
1.把第一個網頁的所有簡歷的新頁面url獲取到
2.到詳情頁,獲取下載地址,對下載地址發起請求
3.完成之後,再考慮進行分頁操作
#常規步驟:’’‘舉例
0.創建文件夾用來存放爬取到的數據
{
if not os.path.exists(’./moban’):
os.mkdir(’./moban’)
}
1.獲取url響應數據 page_text
2.實例化一個對象 tree,通過 etree.HTML(page_text)
3.利用xpath工具定位到想要獲取的內容 tree.xpath(’/div[@class=‘ss’]/ul/li/a’)
4.for循環遍歷獲得多個屬性,並進行提取alt = li.xpath(’./a/img/@alt’)[0]
5.進行持久化存儲
{
1.獲得新的url對應圖片的響應數據 data = requests.get().content
2.img_path = ‘moban/’+img_name
}
‘’’
注意:
1.通過觀察第一頁的url :http://sc.chinaz.com/jianli/free.html
與後面頁面的規律不同,需要額外爬取。即爬取第一頁,和第二頁到第N頁的模板。
2…rar文件可以二進制文件形式寫入
3.獲取新的url之後,需要對新的url進行實例化,這一步很容易遺漏
代碼
import requests
import os
from lxml import etree
if not os.path.exists('./moban'):
os.mkdir('./moban')
#requests
url = 'http://sc.chinaz.com/jianli/free.html'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'
}
response = requests.get(url=url,headers=headers)
#設定編碼格式爲中文
response.encoding = 'utf-8'
page_text = response.text
#xpath
tree = etree.HTML(page_text)
#獲取所有的a標籤
a_list = tree.xpath('//*[@id="container"]/div/a')
for li in a_list:
new_url= li.xpath('./@href')[0]
#print(new_url) #打印出獲取的html
mb_name = li.xpath('./img/@alt')[0]
#print(mb_name) #打印出模板的名字
mb_name= mb_name+'.rar'
down_data = requests.get(url=new_url,headers=headers).text
#再次實例化一個xpth對象
xiazai = etree.HTML(down_data)
down_list = xiazai.xpath('//*[@id="down"]/div[2]/ul/li[3]/a')
for li in down_list:
down = li.xpath('./@href')[0]
#print(down)
last_data = requests.get(url=down,headers=headers)
last_data.encoding = 'utf-8'
last_data= last_data.content
#已經獲取到了下載鏈接down,下面進行持久化存儲即可
path='./moban/'+mb_name
with open(path,'wb') as fp:
fp.write(last_data)
print(mb_name,'下載成功')
爬取效果
因爲有幾百頁,此處就下載了一頁