Python爬虫之ajax爬虫实战(并把数据存储都MongoDB)
import requests
import pymongo
from urllib.parse import urlencode
import json
# 设置MongoDB的连接
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['jobbole']
# 设置ajax请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
def get_ajax_data(url, params):
# 发送ajax请求获取数据
response = requests.get(url, headers=headers, params=params)
return response.json()
def save_to_mongodb(data_list):
# 将数据保存到MongoDB
for data in data_list:
title = data.get('title')
job_id = data.get('jobid')
salary = data.get('salary')
city = data.get('cityname')
experience = data.get('experience')
education = data.get('education')
company_name = data.get('companyname')
db.jobs.update_one({'job_id': job_id}, {'$set': {
'title': title,
'salary': salary,
'city': city,
'experience': experience,
'education': education,
'company_name': company_name
}}, upsert=True)
def main():
# 设置ajax请求参数
base_url = 'https://www.jobbole.com/zhaopin/p'
page = 1
fetch_num = 10
query = {
'city': '北京',
'experience': '3-5年',
'job_label': 'Python',
'page': page,
'kd': 'python'
}
query_str = urlencode(query)
url = base_url + '?' + query_str
# 获取ajax数据并保存到MongoDB
data = get_ajax_data(url, query)
total_page = data['totalPage']
save_to_mongodb(data['data'])
# 循环获取其他页面的数据
for page in range(2, total_page+1):
query['page'] = page
query_str = urlencode(query)
url = base_url + '?' + query_str
data = get_ajax_data(url, query)
save_to_mongodb(data['data'])
if __name__ == '__main__':
main()
这段代码实现了与原代码相同的功能,但是修正了一些问题,并且使用了更现代的Python库和方法。代码首先设置了MongoDB的连接,然后定义了请求头和请求参数。get_ajax_data
函数负责发起AJAX请求并获取JSON格式的响应数据。save_to_mongodb
函数负责将获取到的数据保存到MongoDB中。最后,main
函数组织了主要的逻辑流程,包括计算总页数、循环获取每一页的数据,并将其保存。
评论已关闭