python爬虫开发实例-爬取通辽当地某网站的招聘信息
二次开发
admin
发布时间:2026-01-12 16:27:05
浏览: 次
Python的功能很强大,特别是爬虫功能。下面以爬取通辽当地某网站的招聘栏目为例,具体讲解Python爬虫开发的过程。
import requests
import re
import time
from urllib.parse import urljoin
from collections import defaultdict
# 配置请求头,模拟浏览器访问
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8'
}
# 存储已爬取的信息,用于去重
processed_data = defaultdict(str)
def get_page_content(url):
"""
获取页面内容,处理请求异常
"""
try:
response = requests.get(url, headers=HEADERS, timeout=10)
response.raise_for_status() # 抛出HTTP错误
response.encoding = 'utf-8' # 该网站使用gb2312编码
return response.text
except requests.exceptions.RequestException as e:
print(f"请求页面 {url} 失败: {e}")
return None
def extract_links(main_url):
"""
从主页面提取所有招聘详情页链接
"""
html = get_page_content(main_url)
if not html:
return []
# 匹配详情页链接的正则表达式
# link_pattern = re.compile(r'href="(\.\./gqxx/showfabus\.asp\?dadid=\d+&fa=4)"')
link_pattern = re.compile(r'href="([^"]*showfabus\.asp[^"]*)"', re.I)
links = link_pattern.findall(html)
# 拼接完整URL
full_links = [urljoin(main_url, link) for link in links]
print(f"找到 {len(full_links)} 个招聘详情页链接")
return full_links
def extract_job_info(html):
"""
从详情页提取招聘内容和电话号码
"""
if not html:
return None, None
# 提取招聘主要内容(去除多余标签)
content_pattern = re.compile(r'<span class="sf3">(.*)</span>', re.S)
content_match = content_pattern.search(html)
print(content_match)
job_content = ""
if content_match:
# 去除HTML标签
job_content = re.sub(r'<.*?>', '', content_match.group(1))
# 去除多余空格和换行
job_content = re.sub(r'\s+', ' ', job_content).strip()
print(job_content)
# 提取电话号码(匹配手机号11位,座机号带区号格式)
# 第一步:匹配整个区间(兼容中英文括号、多余字符)
range_pattern = re.compile(r'联系电话[\s\S]*?[(\(]查看归属地[)\)]', re.S)
range_match = range_pattern.search(html)
if not range_match:
phone_str ='空'
else:
# 第二步:在区间内提取完整的手机号/座机号(修正后的规则)
phone_pattern = re.compile(r'1[3-9]\d{9}|0\d{2,3}[-\s]?\d{7,8}')
phone_list = phone_pattern.findall(range_match.group())
#print("电话match:" + phone_matches)
if phone_list:
print(" | ".join(phone_list))
# 去重并合并电话号码
phone_numbers = list(set(phone_list)) if phone_list else []
phone_str = ' | '.join(phone_numbers) if phone_numbers else "未找到电话号码"
print("电话:" + phone_str)
else:
phone_str = '空'
return job_content, phone_str
def save_to_file(filename, data):
"""
将去重后的信息写入文件
"""
with open(filename, 'w', encoding='utf-8') as f:
for idx, (phone, content) in enumerate(data.items(), 1):
f.write(f"======== 招聘信息 {idx} ========\n")
f.write(f"电话号码: {phone}\n")
f.write(f"招聘内容: {content}\n")
f.write("\n" + "-" * 50 + "\n\n")
print(f"信息已保存到 {filename} 文件,共 {len(data)} 条去重后的招聘信息")
def main():
# 目标主页面URL
main_url = "http://www.tlxxw.com/gqxx/showfabu.asp?fa=4"
# 输出文件名
output_file = "job.txt"
# 1. 提取所有详情页链接
detail_links = extract_links(main_url)
if not detail_links:
print("未找到任何招聘详情页链接")
return
# 2. 遍历每个链接提取信息
for idx, link in enumerate(detail_links, 1):
link = link.replace('&', '&')
print(f"\n正在爬取第 {idx}/{len(detail_links)} 个链接: {link}")
html = get_page_content(link)
# print(html)
if html:
job_content, phone = extract_job_info(html)
print(job_content)
# 去重:以电话号码为键(无号码则用内容摘要)
key = phone if phone != "未找到电话号码" else job_content[:50]
if key and job_content:
processed_data[key] = job_content
# 延时1秒,避免请求过快被封IP
time.sleep(1)
# 3. 保存去重后的信息到文件
save_to_file(output_file, processed_data)
if __name__ == "__main__":
main()
爬取后写入txt文件。下面是结果的一部分内容:
======== 招聘信息 3 ======== 电话号码: 1327485672 招聘内容: 同乐发饮用水诚聘配送人员 身体健康,勤奋刻苦,敬业爱岗 保底5000以上加提成 自带电动车,多劳多得 电话:13274856722 15248339633 -------------------------------------------------- ======== 招聘信息 4 ======== 电话号码: 1874759588 招聘内容: 世纪良缘礼仪公司高薪诚聘: 岗位一:婚礼策划师 工资待遇:4000元―――12000元。 工作描述:向准新人介绍婚礼庆典服务项目,并达成协议.全程策划实施婚礼庆典全过程.有无工作经验均可,公司提供一对一专业培训.要求口才好应变能力强,有敬业精神,有文化底蕴,能长期从事此项工作。有过销售或教师,导游,企划人员等从业经验者。会运用电脑PS者。 岗位二:平面设计师:(熟练使用各种设计类软件。)工资面议。 联系人:18747595885 -------------------------------------------------- ======== 招聘信息 5 ======== 电话号码: 1556759999 招聘内容: 招聘单位:铂爱美容会馆 招聘岗位:美容师美体师 薪资待遇:月薪5000元 员工待遇:包吃包住 招聘要求:有经验者 联系人:王院长 联系电话:15567599999 -------------------------------------------------- 可以看出还有一些瑕疵,比如电话号码少一位。也可以继续增加功能,比如把爬取的内容写入数据库等,可以继续完善。 另外做爬虫主要是对正则表达式要比较熟悉,可以用下面的网站在线调试正则 https://regex101.com/ 很方便,可以把网页代码复制进去,然后写正则,会显示匹配结果。 如果需要开发爬虫,可以联系我QQ:804752009

售前咨询专员