案例一:使用DrissionPage抓取BOSS上的招聘信息
使用requests獲取BOSS網站上的內容是非常困難的,但是通過網頁自動化工具DrissionPage或者是Playwright或者是Seleenium是非常容易的,接下來我們就給出使用DrissionPage爬取BOSS網站python招聘的信息,僅供學習參考。
import time
from DrissionPage import Chromium
import pandas as pdpage = Chromium().latest_tab # 打開一個標簽頁,并讓該標簽頁訪問BOSS直聘
page.listen.start('https://www.zhipin.com/wapi/zpgeek/search/joblist.json') # 監聽對應的能夠返回數據的Ajax請求(監聽可以放在訪問頁面之前也可以放在訪問頁面之后)
page.get('https://www.zhipin.com/yantai/?ka=header-home') # 訪問BOSS直聘page.ele('xpath=//p[@class="ipt-wrap"]/input').input('python')
page.ele('xpath=//button[@class="btn btn-search"]').click()res = page.listen.wait() # 獲取監聽到的Ajax請求的響應
print('res:::',res.response.body)
joblist = res.response.body['zpData']['jobList']for i in range(10):next_btn = page.ele("xpath=//div[@class='options-pages']/a/i[@class='ui-icon-arrow-right']")next_btn_a = next_btn.parent().attr('class') # 取出next_btn標簽父標簽的class屬性if 'disabled' not in next_btn_a:next_btn.click()time.sleep(2)print('爬蟲中---')res = page.listen.wait()joblist += res.response.body['zpData']['jobList']else:print('爬蟲結束')# 數據保存
df = pd.DataFrame(joblist)
df.to_excel('boss直聘.xlsx', index=False)page.close()
?在上述的程序中,我們使用DrissionPage種自帶的監聽技術獲取Ajax相應數據。分析BOSS網站返回的數據,發現他是Ajax請求,當讓頁不可以使用監聽技術,直接等待頁面加載完畢之后定位元素所在的位置即可。
程序運行過程中可能會出現卡在某一個頁面不動了,需要我們手動點擊下一頁(人工接管一下再程序接管)才可以正常運行。
案例二:使用DrissionPage破解瑞數
使用requests破解瑞數是非常困難的,我們接下來仍然使用DrissionPage獲取相應的數據,本代碼僅供大家參考學習。
from DrissionPage import Chromium,ChromiumOptions
import time,random# 定義一個方法用于獲取某個網頁的內容
def get_url_content(page): # 傳入的對象是一個頁面對象li_s = page.eles('xpath=//div[@class="pd0-20"]/ul/li')for li in li_s:title = li.ele('xpath=./a[@class="dy_title"]').text # 取出標題content = li.ele('xpath=.//p[@class="neirong"]').text # 取出內容print(title)print(content)print('==========================================')options = ChromiumOptions()
options.auto_port()browser = Chromium(options)
page = browser.latest_tabpage.get(url='https://sugh.szu.edu.cn/Html/News/Columns/7/Index.html',retry=3,timeout=15,interval=3)
get_url_content(page) # 獲取第一頁的page內容next_btn = page.ele('xpath=//a[@class="pagination_nextpage ui-state-default ui-corner-all"]')# 翻頁爬取
while next_btn.attr('href'):next_btn.click()time.sleep(random.randint(3, 5)) # 設置一個等待網頁加載的時間print('正在爬取下一頁-----------------------------------------------------------------------------------')get_url_content(page) # 獲取下一頁的page內容next_btn = page.ele('xpath=//a[@class="pagination_nextpage ui-state-default ui-corner-all"]')
print('爬蟲結束')page.close()'''
pagination_nextpage ui-state-default ui-corner-all
pagination_lastpage ui-state-default ui-corner-all
'''