我按照網站併成功得到職位頁面AJAX數據Apple.com充分利用AJAX數據在Python
教學網站:http://toddhayton.com/2015/03/11/scraping-ajax-pages-with-python/
下面是完整的代碼,這是正確的:
import json
import requests
from bs4 import BeautifulSoup
class AppleJobsScraper(object):
def __init__(self):
self.search_request = {
"jobType":"0",
"sortBy":"req_open_dt",
"sortOrder":"1",
"filters":{
"locations":{
"location":[{
"type":"0",
"code":"USA"
}]
}
},
"pageNumber":"0"
}
def scrape(self):
jobs = self.scrape_jobs()
for job in jobs:
#print(job)
pass
def scrape_jobs(self, max_pages=3):
jobs = []
pageno = 0
self.search_request['pageNumber'] = pageno
while pageno < max_pages:
payload = {
'searchRequestJson': json.dumps(self.search_request),
'clientOffset': '-300'
}
r = requests.post(
url='https://jobs.apple.com/us/search/search-result',
data=payload,
headers={
'X-Requested-With': 'XMLHttpRequest'
}
)
s = BeautifulSoup(r.text)
if not s.requisition:
break
for r in s.findAll('requisition'):
job = {}
job['jobid'] = r.jobid.text
job['title'] = r.postingtitle and \
r.postingtitle.text or r.retailpostingtitle.text
job['location'] = r.location.text
jobs.append(job)
# Next page
pageno += 1
self.search_request['pageNumber'] = pageno
return jobs
if __name__ == '__main__':
scraper = AppleJobsScraper()
scraper.scrape()
我幾乎瞭解網站提供的代碼,除了一小段之外。
for r in s.findAll('requisition'):
job = {}
job['jobid'] = r.jobid.text
job['title'] = r.postingtitle and \
r.postingtitle.text or r.retailpostingtitle.text
job['location'] = r.location.text
jobs.append(job)
我很好奇什麼s.findAll('requisition')
手段。
當然,我應該打印出print(s.get_text())
的網站文字,看看網站的源代碼是什麼樣的。
但我得到的不像網站代碼,這讓我更加困惑。
所以我想知道爲什麼代碼可以使用s.findAll('requisition')
來獲取數據。
爲什麼代碼知道它可以使用job['jobid']
,job['title']
, job['location']
來獲取它想要的數據。
我非常感謝您的幫助!
檢查BeautifulSoup的文檔 - 這是html解析器,所以它解析html並將其拆分成可以被多個參數遍歷的內部結構,這個具體的使用xml標籤名稱 – Jerzyk
@Jerzyk因此'requisition'是XML中的標籤?程序員如何知道他可以使用job ['jobid']','job ['title']','job ['location']'來獲取他想要的數據?我發現沒有線索知道它。 –
您正在從已知源提取數據,因此您應該知道,如果不知道 - 分析服務返回的數據,然後用專用工具對其進行分析([BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/bs4/ doc /)在這個例子中) – Jerzyk