很多小伙伴儿跟十六一样特别喜欢研究爬虫,今天也是跟大家一起来学习写爬虫的一天:代码仅供学习!
爬虫任务:
1.抓取 **人才网 job招聘信息
2.保存到数据库job.db
思路:爬取一个网站->循环爬取->保存(第二次运行可把数据库创建函数注解掉)
# -*- codeing = utf-8 -*-
# @Time : 2023/11/11 0027 10:03
# @File : pazhua.py
# @Function :抓取 **人才网 job招聘信息
from bs4 import BeautifulSoup # 网页解析,获取数据
import re # 正则表达式,进行文字匹配
import urllib.request,urllib.error # 定义url,获取网页数据
import xlwt
import sqlite3
def main():
url = 'https://hhpi.cn/'#这里是招聘网站的网址
datalist = paqu(url)
dbpath = 'job.db' #保存路径
init_db(dbpath)
savedb(datalist,dbpath)
titlefind = re.compile(r'<h4 class="job_name"><a.*>(.*)</a>') # 招聘的标题 职位
timefind = re.compile(r'<span class="view-pos-date">(.*)</span>') # 招聘发布的时间
moneyfind = re.compile(r'<span style="font-weight:bold;color:#5B6A84">(.*)</span><span>') # 招聘薪资
dptionfind = re.compile(r'<div.*class="job_desc light_width".*>((?:.|\n)*?)</div>') # 简介 匹配带有空格/换行的所有字符 正则表达式((?:.|\n)*?)
gongsifind = re.compile(r'<div class="job_info light_width"> <a.*>(.*?)</a>')
#爬取网页
def paqu(url):
datalist = []
for i in range(0,24): #左闭右开
xunhuan_url = url + str(1+i)
#print(xunhuan_url)
html = paqu_one(xunhuan_url)
#解析数据 处理数据
soup = BeautifulSoup(html,"html.parser")
for biaoqian in soup.find_all('div',class_="item_box"):
data = []
biaoqian = str(biaoqian)
title = re.findall(titlefind,biaoqian)
for i in title:
title = i
data.append(i)
time = re.findall(timefind,biaoqian)
for i in time:
time = i
data.append(time)
money = re.findall(moneyfind,biaoqian)
for i in money:
money = i
data.append(money)
gongsi = re.findall(gongsifind,biaoqian)
for i in gongsi:
gongsi = i
data.append(gongsi)
jieshao = re.findall(dptionfind,biaoqian)
for i in jieshao:
jieshao = i
data.append(jieshao)
datalist.append(data)
#print(datalist)
return datalist
# 爬抓1个网页数据
def paqu_one(url):
header = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
}
request = urllib.request.Request(url=url,headers=header)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("gbk")
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
#写入数据库
def savedb(datalist,dbpath):
con = sqlite3.connect(dbpath)
cur = con.cursor()
for i in range(len(datalist)): #循环datalist的条数
data = datalist[i]
for index in range(len(data)):
data[index] = '"' + str(data[index]) + '"' # 这里增加了将data转为字符串才能拼接
sql = '''
insert into job(
title,time,money,gongsi,miaoshu
)values (%s)
''' % ",".join(data)
#print(sql)
cur.execute(sql) # 执行sql
con.commit() # 提交到数据库
print("写入数据库第%d"%i)
cur.close()
con.close() #关闭数据库
#新建数据库
def init_db(dbpath):
conn = sqlite3.connect(dbpath)
sql = '''
create table job
(id integer primary key autoincrement ,
title varchar ,
time varchar ,
money varchar ,
gongsi varchar ,
miaoshu varchar);
'''
cursor = conn.cursor() #获取游标
cursor.execute(sql)
conn.commit()
conn.close()
if __name__ == "__main__":
main()
这里每个步骤都是十六封装好的函数:
paqu_one(url):是爬抓一个网页
-url就是爬取的网址
paqu(url):是当前执行爬取网页的主函数
savedb(datalist,dbpath)"是创建数据库
-datalist:是爬取的信息
-dbpath是:保存的数据库路径
init_db(dbpath)这个是创建数据库
-dbpath 路径
最后,代码仅供学习参考,里面的信息截取规则和正则表达式是按照对应网站来写的,如果是别的网站是需要进行修改成对应的!
免责声明
本站提供的一切内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!