爬蟲目的
本文是想通過爬取拉勾網Python相關崗位數據,簡單梳理Requests
和xpath
的使用方法。
代碼部分并沒有做封裝,數據請求也比較簡單,所以該項目只是為了熟悉requests爬蟲的基本原理,無法用于穩定的爬蟲項目。
爬蟲工具
這次使用Requests
庫發送http請求,然后用lxml.etree
解析HTML文檔對象,并使用xpath
獲取職位信息。
Requests簡介
Requests是一款目前非常流行的http請求庫,使用python編寫,能非常方便的對網頁Requests進行爬取。
官網里介紹說:Requests is an elegant and simple HTTP library for Python, built for human beings.
Requests優雅、簡易,專為人類打造!
總而言之,Requests用起來簡單順手。
Requests庫可以使用pip
或者conda
安裝,本文python環境為py3.6。
試試對百度首頁進行數據請求:
# 導入requests模塊
import requests<br>
# 發出http請求
re = requests.get("https://www.baidu.com/")
# 查看響應狀態
print(re.status_code)
# 查看url
print(re.url)
# 查看響應內容
print(re.text)
# 查看編碼
print(re.encoding)
# 二進制響應內容
print(re.content)
# json響應內容
print(re.json)
xpath簡介
xpath 是一門在 XML 文檔中查找信息的語言,可用來在 XML 文檔中對元素和屬性進行遍歷。
對獲取的數據進行解析需要用到lxml庫,lxml庫是Python的一個解析庫,支持HTML和XML的解析,支持XPath。
開始數據采集
1、請求地址:
https://www.lagou.com/zhaopin/Python/
2、需要爬取的內容
獲取職位概況信息,包括:
- 職位名稱
- 公司名稱
- 公司簡介
- 薪水
- 職位招聘對象
- 工作職責
- 工作要求
3、查看html
如果你使用chrome瀏覽器,登陸拉勾網,按F12
可以進入開發者工具頁面:
這時候你會看到該頁面的html網頁源碼。
接下來需要尋找崗位信息對應的源碼,比如說我想要獲取職位名稱:
你會看到開發者工具頁面左上角有個箭頭標志,你需要點擊它,然后再點擊崗位名稱,就能看到對應的源碼。
知道對應的源碼后,我們就可以利用xpath提取里面的文本。
4、利用requests發出數據請求
# 請求頭
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 Core/1.47.933.400 QQBrowser/9.4.8699.400',}# 發出數據請求,返回response響應對象
r = requests.get('https://www.lagou.com/zhaopin/Python/',headers=headers)
# 進行utf-8編碼
r.encoding = "utf-8"
5、利用xpath提取數據
# 構造一個xpath解析對象
selector = etree.HTML(r.text)
# 職位編號,一頁共有14個職位,所以這里可以傳遞0~13任意數字
row_num = str(0)
'''獲取職位概況信息,包括:職位名稱、公司名稱、公司簡介、薪水、職位招聘對象'''
# p_name 職位名稱
p_name = selector.xpath('//ul[@class="item_con_list"]/li[@data-index={}]//h3/text()'.format(row_num))[0]
# p_company 招聘公司名稱
p_company = selector.xpath('//ul[@class="item_con_list"]/li[@data-index={}]//div[@class="company_name"]/a/text()'.format(row_num))[0]
# p_industry 招聘公司簡介
p_industry = selector.xpath('//ul[@class="item_con_list"]/li[@data-index={}]//div[@class="industry"]/text()'.format(row_num))[0]
# p_money 職位薪資
p_money = selector.xpath('//ul[@class="item_con_list"]/li[@data-index={}]//span[@class="money"]/text()'.format(row_num))[0]
# p_require 職位招聘對象
p_require = selector.xpath('//ul[@class="item_con_list"]/li[@data-index={}]//div[@class="li_b_l"]/text()'.format(row_num))[2]
# 該職位詳細信息跳轉鏈接
p_href = selector.xpath('//ul[@class="item_con_list"]/li[@data-index={}]//a[@class="position_link"]/@href'.format(row_num))[0]
崗位職責和要求的信息在另外的網頁,所以要先獲取對應網址,再進行數據請求。
''' 獲取工作職責和工作要求等詳細信息'''
# 返回response響應對象
r_detail = requests.get(p_href,headers=headers)
# 進行utf-8編碼
r_detail.encoding = "utf-8"
# 解析HTML對象
selector_detail = etree.HTML(r_detail.text)
# p_detail 工作職責和工作要求信息
p_detail = selector_detail.xpath('//div[@class="job-detail"]/p//text()')
將所有信息放進列表并打印:
'''將獲取到的有效信息放到列表中'''
p_list = [p_name, p_company, p_industry.strip(), p_money, p_require.strip(),"\n ".join(p_detail)]
for i in p_list:print(i)
輸出:
總結
本文使用requests和xpath工具對拉勾網python職位數據進行爬取并解析,旨在了解requests和xpath的使用方法。
對于想翻頁爬取所有崗位信息,本文并無介紹。有興趣的童鞋可以更改地址參數,對代碼進行動態包裝,嘗試爬取所有python崗位信息。
最后,推薦一款不錯的自動化爬蟲工具-亮數據。
亮數據平臺提供了強大的數據采集工具,比如Web Scraper IDE、亮數據瀏覽器、SERP API等,能夠自動化地從網站上抓取所需數據,無需分析目標平臺的接口,直接使用亮數據提供的方案即可安全穩定地獲取數據。
網站:https://get.brightdata.com/weijun
亮數據瀏覽器支持對多個網頁進行批量數據抓取,適用于需要JavaScript渲染的頁面或需要進行網頁交互的場景。
另外,亮數據瀏覽器內置了自動網站解鎖功能,能夠應對各種反爬蟲機制,確保數據的順利抓取。它能兼容多種自動化工具,如Puppeteer、Playwright和Selenium等,用戶可以根據需求選擇合適的工具進行數據抓取。