python爬蟲開發(fā)實(shí)例-爬取通遼當(dāng)?shù)啬尘W(wǎng)站的招聘信息
二次開發(fā)
admin
發(fā)布時(shí)間:2026-01-12 16:27:05
瀏覽: 次
Python的功能很強(qiáng)大,特別是爬蟲功能。下面以爬取通遼當(dāng)?shù)啬尘W(wǎng)站的招聘欄目為例,具體講解Python爬蟲開發(fā)的過程。
import requests
import re
import time
from urllib.parse import urljoin
from collections import defaultdict
# 配置請(qǐng)求頭,模擬瀏覽器訪問
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'
}
# 存儲(chǔ)已爬取的信息,用于去重
processed_data = defaultdict(str)
def get_page_content(url):
"""
獲取頁面內(nèi)容,處理請(qǐng)求異常
"""
try:
response = requests.get(url, headers=HEADERS, timeout=10)
response.raise_for_status() # 拋出HTTP錯(cuò)誤
response.encoding = 'utf-8' # 該網(wǎng)站使用gb2312編碼
return response.text
except requests.exceptions.RequestException as e:
print(f"請(qǐng)求頁面 {url} 失敗: {e}")
return None
def extract_links(main_url):
"""
從主頁面提取所有招聘詳情頁鏈接
"""
html = get_page_content(main_url)
if not html:
return []
# 匹配詳情頁鏈接的正則表達(dá)式
# 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)} 個(gè)招聘詳情頁鏈接")
return full_links
def extract_job_info(html):
"""
從詳情頁提取招聘內(nèi)容和電話號(hào)碼
"""
if not html:
return None, None
# 提取招聘主要內(nèi)容(去除多余標(biāo)簽)
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標(biāo)簽
job_content = re.sub(r'<.*?>', '', content_match.group(1))
# 去除多余空格和換行
job_content = re.sub(r'\s+', ' ', job_content).strip()
print(job_content)
# 提取電話號(hào)碼(匹配手機(jī)號(hào)11位,座機(jī)號(hào)帶區(qū)號(hào)格式)
# 第一步:匹配整個(gè)區(qū)間(兼容中英文括號(hào)、多余字符)
range_pattern = re.compile(r'聯(lián)系電話[\s\S]*?[(\(]查看歸屬地[)\)]', re.S)
range_match = range_pattern.search(html)
if not range_match:
phone_str ='空'
else:
# 第二步:在區(qū)間內(nèi)提取完整的手機(jī)號(hào)/座機(jī)號(hào)(修正后的規(guī)則)
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))
# 去重并合并電話號(hào)碼
phone_numbers = list(set(phone_list)) if phone_list else []
phone_str = ' | '.join(phone_numbers) if phone_numbers else "未找到電話號(hào)碼"
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"電話號(hào)碼: {phone}\n")
f.write(f"招聘內(nèi)容: {content}\n")
f.write("\n" + "-" * 50 + "\n\n")
print(f"信息已保存到 {filename} 文件,共 {len(data)} 條去重后的招聘信息")
def main():
# 目標(biāo)主頁面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. 遍歷每個(gè)鏈接提取信息
for idx, link in enumerate(detail_links, 1):
link = link.replace('&', '&')
print(f"\n正在爬取第 {idx}/{len(detail_links)} 個(gè)鏈接: {link}")
html = get_page_content(link)
# print(html)
if html:
job_content, phone = extract_job_info(html)
print(job_content)
# 去重:以電話號(hào)碼為鍵(無號(hào)碼則用內(nèi)容摘要)
key = phone if phone != "未找到電話號(hào)碼" else job_content[:50]
if key and job_content:
processed_data[key] = job_content
# 延時(shí)1秒,避免請(qǐng)求過快被封IP
time.sleep(1)
# 3. 保存去重后的信息到文件
save_to_file(output_file, processed_data)
if __name__ == "__main__":
main()
爬取后寫入txt文件。下面是結(jié)果的一部分內(nèi)容:
======== 招聘信息 3 ======== 電話號(hào)碼: 1327485672 招聘內(nèi)容: 同樂發(fā)飲用水誠聘配送人員 身體健康,勤奮刻苦,敬業(yè)愛崗 保底5000以上加提成 自帶電動(dòng)車,多勞多得 電話:13274856722 15248339633 -------------------------------------------------- ======== 招聘信息 4 ======== 電話號(hào)碼: 1874759588 招聘內(nèi)容: 世紀(jì)良緣禮儀公司高薪誠聘: 崗位一:婚禮策劃師 工資待遇:4000元―――12000元。 工作描述:向準(zhǔn)新人介紹婚禮慶典服務(wù)項(xiàng)目,并達(dá)成協(xié)議.全程策劃實(shí)施婚禮慶典全過程.有無工作經(jīng)驗(yàn)均可,公司提供一對(duì)一專業(yè)培訓(xùn).要求口才好應(yīng)變能力強(qiáng),有敬業(yè)精神,有文化底蘊(yùn),能長期從事此項(xiàng)工作。有過銷售或教師,導(dǎo)游,企劃人員等從業(yè)經(jīng)驗(yàn)者。會(huì)運(yùn)用電腦PS者。 崗位二:平面設(shè)計(jì)師:(熟練使用各種設(shè)計(jì)類軟件。)工資面議。 聯(lián)系人:18747595885 -------------------------------------------------- ======== 招聘信息 5 ======== 電話號(hào)碼: 1556759999 招聘內(nèi)容: 招聘單位:鉑愛美容會(huì)館 招聘崗位:美容師美體師 薪資待遇:月薪5000元 員工待遇:包吃包住 招聘要求:有經(jīng)驗(yàn)者 聯(lián)系人:王院長 聯(lián)系電話:15567599999 -------------------------------------------------- 可以看出還有一些瑕疵,比如電話號(hào)碼少一位。也可以繼續(xù)增加功能,比如把爬取的內(nèi)容寫入數(shù)據(jù)庫等,可以繼續(xù)完善。 另外做爬蟲主要是對(duì)正則表達(dá)式要比較熟悉,可以用下面的網(wǎng)站在線調(diào)試正則 https://regex101.com/ 很方便,可以把網(wǎng)頁代碼復(fù)制進(jìn)去,然后寫正則,會(huì)顯示匹配結(jié)果。 如果需要開發(fā)爬蟲,可以聯(lián)系我QQ:804752009
相關(guān)推薦
- 華磊物流接口,php語言開發(fā)實(shí)例
- Opencart 3.x版本支付插件開發(fā)PHP開發(fā)實(shí)例
- php語言的拉卡拉支付接口的開發(fā)實(shí)例
- wordpress支付插件開發(fā),php支付插件開發(fā)實(shí)例
- Telegram機(jī)器人開發(fā)實(shí)例 php語言
- python如何進(jìn)行網(wǎng)站維護(hù)?有什么優(yōu)勢?
- 學(xué)會(huì)python語言之后,我們能干什么?
- 如果利用京東聯(lián)盟API把京東的商品展示在自己的網(wǎng)站(PH
- 今天介紹一個(gè)非常流行的Django: Python Web應(yīng)用開發(fā)框
- 谷歌Google驗(yàn)證碼的開發(fā)實(shí)例,PHP版本源碼

售前咨詢專員