写一个爬取51job网站数据的代码并存入数据库和可视化的源码
时间: 2024-01-24 14:19:10 浏览: 196
这里提供一个基于Python的爬虫代码,可以爬取51job网站的职位信息并存入MySQL数据库,并且使用Matplotlib进行可视化展示。
首先需要安装以下库:
- requests:用于发送请求获取网页内容
- BeautifulSoup:用于解析网页内容
- pymysql:用于连接MySQL数据库
- Matplotlib:用于可视化展示
安装方法:
```
pip install requests
pip install beautifulsoup4
pip install pymysql
pip install matplotlib
```
接下来是代码实现:
```python
import requests
from bs4 import BeautifulSoup
import pymysql
import matplotlib.pyplot as plt
import numpy as np
# 定义要爬取的网页URL和请求头信息
url = 'https://search.51job.com/list/000000,000000,0000,00,9,99,Python,2,1.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 连接MySQL数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test')
cursor = conn.cursor()
# 创建数据表
sql_create_table = '''CREATE TABLE IF NOT EXISTS job_info (
id INT(11) NOT NULL AUTO_INCREMENT,
job_name VARCHAR(100) NOT NULL,
company_name VARCHAR(100) NOT NULL,
work_location VARCHAR(50) NOT NULL,
salary VARCHAR(50) NOT NULL,
release_time VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
)'''
cursor.execute(sql_create_table)
# 发送网络请求获取网页内容
response = requests.get(url, headers=headers)
response.encoding = 'gbk'
html = response.text
# 解析网页内容
soup = BeautifulSoup(html, 'html.parser')
job_list = soup.select('.dw_table .el')
# 遍历职位信息列表并存入MySQL数据库
for job in job_list:
job_name = job.select_one('.t1 a').text.strip()
company_name = job.select_one('.t2 a').text.strip()
work_location = job.select_one('.t3').text.strip()
salary = job.select_one('.t4').text.strip()
release_time = job.select_one('.t5').text.strip()
sql_insert = "INSERT INTO job_info (job_name, company_name, work_location, salary, release_time) VALUES ('%s', '%s', '%s', '%s', '%s')" % (job_name, company_name, work_location, salary, release_time)
cursor.execute(sql_insert)
conn.commit()
# 查询数据库中的数据并进行可视化展示
sql_select = "SELECT work_location, COUNT(*) FROM job_info GROUP BY work_location"
cursor.execute(sql_select)
results = cursor.fetchall()
x = []
y = []
for result in results:
x.append(result[0])
y.append(result[1])
plt.bar(x, y)
plt.title('Python职位分布情况')
plt.xlabel('工作地点')
plt.ylabel('职位数量')
plt.show()
# 关闭数据库连接
cursor.close()
conn.close()
```
这个代码会从51job网站爬取Python职位信息,并将职位名称、公司名称、工作地点、薪资和发布时间存入MySQL数据库中。然后,它会查询数据库中的数据并使用Matplotlib绘制一个柱状图,展示Python职位在各个工作地点的分布情况。最后,关闭数据库连接。
如果需要在代码中修改连接MySQL数据库的参数,比如主机名、端口号、用户名、密码和数据库名,可以根据自己的实际情况进行修改。
阅读全文