我按照网站并成功得到职位页面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