网站建设公司工作岗位说明书网上商店网站设计
2026/6/1 15:55:44 网站建设 项目流程
网站建设公司工作岗位说明书,网上商店网站设计,wordpress后台很卡,深圳有没有什么网站一、新闻爬虫的技术架构与核心挑战 1.1 技术架构设计 新闻爬虫的核心架构分为三层#xff1a;请求层#xff08;获取网页原始数据#xff09;、解析层#xff08;提取目标信息#xff09;、清洗层#xff08;标准化数据格式#xff09;#xff0c;辅以存储层完成数据…一、新闻爬虫的技术架构与核心挑战1.1 技术架构设计新闻爬虫的核心架构分为三层请求层获取网页原始数据、解析层提取目标信息、清洗层标准化数据格式辅以存储层完成数据持久化。技术选型上Python 凭借丰富的库生态成为首选请求层font stylecolor:rgb(34, 34, 34);requests/font常规请求、font stylecolor:rgb(34, 34, 34);Selenium/font动态渲染页面解析层font stylecolor:rgb(34, 34, 34);BeautifulSoup4/fontHTML 解析、font stylecolor:rgb(34, 34, 34);lxml/font高性能解析清洗层font stylecolor:rgb(34, 34, 34);re/font正则表达式、font stylecolor:rgb(34, 34, 34);pandas/font数据标准化存储层font stylecolor:rgb(34, 34, 34);pandas.to_csv/font文件存储、font stylecolor:rgb(34, 34, 34);pymongo/font数据库存储。1.2 核心挑战新闻网站的反爬机制如 UA 验证、IP 封锁、动态渲染、页面结构差异不同栏目 HTML 布局不同、数据噪声广告文本、冗余标签、乱码是构建爬虫的三大核心挑战。本文将围绕这些挑战给出针对性解决方案。二、新闻爬虫的核心实现过程2.1 环境准备2.2 基础爬虫实现静态页面以国内某新闻资讯网站的资讯栏目为例示例使用模拟域名实际需替换为合法目标站点实现静态页面的新闻数据提取核心步骤包括请求发送、HTML 解析、目标字段提取。完整代码静态页面爬虫pythonimportrequestsfromfake_useragentimportUserAgentfrombs4importBeautifulSoupimportpandasaspdimportreimporttimefromrandomimportrandintclassNewsCrawler:def__init__(self):# 初始化请求头随机生成User-Agentself.uaUserAgent()self.headers{User-Agent:self.ua.random,Accept:text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8,Accept-Language:zh-CN,zh;q0.9,Referer:https://www.baidu.com# 模拟来路降低反爬风险}# 代理配置信息self.proxyHostwww.16yun.cnself.proxyPort5445self.proxyUser16QMSOMLself.proxyPass280651# 构建代理字典支持http和httpsself.proxies{http:fhttp://{self.proxyUser}:{self.proxyPass}{self.proxyHost}:{self.proxyPort},https:fhttps://{self.proxyUser}:{self.proxyPass}{self.proxyHost}:{self.proxyPort}}# 待提取的新闻字段self.news_data[]defsend_request(self,url):发送请求处理基础异常集成代理try:# 随机延时模拟人工访问time.sleep(randint(1,3))# 添加proxies参数使用代理请求responserequests.get(url,headersself.headers,proxiesself.proxies,# 启用代理timeout10,verifyFalse# 忽略SSL证书验证部分代理场景需要)response.raise_for_status()# 抛出HTTP错误response.encodingresponse.apparent_encoding# 自动识别编码解决乱码returnresponse.textexceptrequests.exceptions.ProxyErrorase:print(f代理请求失败{url}错误信息{e})returnNoneexceptrequests.exceptions.RequestExceptionase:print(f请求失败{url}错误信息{e})returnNonedefparse_news_list(self,list_url):解析新闻列表页提取新闻详情页链接htmlself.send_request(list_url)ifnothtml:returnsoupBeautifulSoup(html,lxml)# 定位新闻列表项需根据目标网站调整CSS选择器news_itemssoup.select(div.news-list ul li)foriteminnews_items:try:# 提取标题和详情页链接title_tagitem.select_one(a.news-title)ifnottitle_tag:continuetitletitle_tag.get_text(stripTrue)detail_urltitle_tag.get(href)# 补全相对链接ifnotdetail_url.startswith(http):detail_urlhttps://www.example.comdetail_url# 解析详情页self.parse_news_detail(detail_url,title)exceptExceptionase:print(f解析列表项失败{e})continuedefparse_news_detail(self,url,title):解析新闻详情页提取内容、发布时间htmlself.send_request(url)ifnothtml:returnsoupBeautifulSoup(html,lxml)try:# 提取发布时间正则匹配时间格式time_textsoup.select_one(div.news-meta span.publish-time).get_text()publish_timere.search(r\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},time_text).group()# 提取新闻正文剔除广告、冗余标签content_tagsoup.select_one(div.news-content)# 移除广告标签forad_tagincontent_tag.select(div.ad, p.ad-text):ad_tag.extract()# 提取正文文本清理空白字符content.join([p.get_text(stripTrue)forpincontent_tag.select(p)])# 存入临时列表self.news_data.append({title:title,publish_time:publish_time,url:url,content:content})print(f成功解析{title})exceptExceptionase:print(f解析详情页失败{url}错误{e})returndefsave_data(self,save_pathnews_data.csv):将清洗后的数据保存为CSV文件dfpd.DataFrame(self.news_data)# 去重根据标题和URL去重dfdf.drop_duplicates(subset[title,url],keepfirst)# 过滤空内容dfdf[df[content].str.len()50]df.to_csv(save_path,indexFalse,encodingutf-8-sig)print(f数据保存完成共{len(df)}条有效数据)if__name____main__:# 初始化爬虫crawlerNewsCrawler()# 爬取新闻列表页示例链接需替换为实际目标list_urlhttps://www.example.com/news/list?categorytechcrawler.parse_news_list(list_url)# 保存数据crawler.save_data()2.3 动态页面适配Selenium部分新闻网站采用 JavaScript 动态渲染页面如滚动加载、异步加载font stylecolor:rgba(0, 0, 0, 0.85) !important;requests/font无法获取渲染后的内容需使用font stylecolor:rgba(0, 0, 0, 0.85) !important;Selenium/font模拟浏览器访问动态页面解析扩展代码pythonfromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptionsfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECclassDynamicNewsCrawler(NewsCrawler):def__init__(self):super().__init__()# 配置Chrome无头模式无界面运行chrome_optionsOptions()chrome_options.add_argument(--headlessnew)chrome_options.add_argument(--no-sandbox)chrome_options.add_argument(--disable-dev-shm-usage)chrome_options.add_argument(fuser-agent{self.ua.random})self.driverwebdriver.Chrome(optionschrome_options)self.waitWebDriverWait(self.driver,10)defsend_dynamic_request(self,url):发送动态页面请求等待元素加载try:self.driver.get(url)# 等待核心元素加载完成根据目标网站调整self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,div.news-content)))returnself.driver.page_sourceexceptExceptionase:print(f动态请求失败{e})returnNone# 重写详情页解析方法defparse_news_detail(self,url,title):htmlself.send_dynamic_request(url)ifnothtml:return# 后续解析逻辑与静态版一致soupBeautifulSoup(html,lxml)# ...省略重复代码def__del__(self):# 关闭浏览器ifhasattr(self,driver):self.driver.quit()三、新闻数据清洗的核心技巧爬取的原始新闻数据存在大量噪声如乱码、空白字符、广告文本、重复数据、格式不统一等需通过系统化清洗提升数据可用性。3.1 文本清洗剔除噪声与标准化编码修复使用font stylecolor:rgb(34, 34, 34);response.apparent_encoding/font自动识别编码解决中文乱码空白字符清理通过font stylecolor:rgb(34, 34, 34);strip()/font去除首尾空格font stylecolor:rgb(34, 34, 34);re.sub(r\s, , text)/font合并连续空白冗余内容剔除用正则表达式匹配并剔除广告文本如font stylecolor:rgb(34, 34, 34);re.sub(r【广告】|免责声明.*, , content)/font特殊字符过滤移除 HTML 标签、emoji 表情等非文本内容示例python运行defclean_content(self,content):# 移除HTML标签contentre.sub(r[^],,content)# 移除emoji匹配Unicode表情区间emoji_patternre.compile([u\U0001F600-\U0001F64F# 表情符号u\U0001F300-\U0001F5FF# 符号/图标u\U0001F680-\U0001F6FF# 交通/地图符号],flagsre.UNICODE)contentemoji_pattern.sub(r,content)# 移除特殊符号contentre.sub(r[^\u4e00-\u9fa5a-zA-Z0-9。()、],,content)returncontent.strip()3.2 结构化清洗去重与格式统一数据去重基于标题 URL 组合去重同一新闻可能被多个页面引用使用font stylecolor:rgb(34, 34, 34);pandas.drop_duplicates/font实现时间格式标准化将不同格式的发布时间如 “2025-12-24”“2025/12/24”“12 月 24 日”统一为font stylecolor:rgb(34, 34, 34);YYYY-MM-DD HH:MM:SS/font格式python运行fromdatetimeimportdatetimedefstandardize_time(self,time_text):# 匹配多种时间格式time_patterns[r%Y-%m-%d %H:%M:%S,r%Y/%m/%d %H:%M:%S,r%Y年%m月%d日 %H:%M,r%m月%d日 %H:%M]forpatternintime_patterns:try:if年intime_textandnottime_text.startswith(2025):time_text2025年time_text# 补充年份示例dtdatetime.strptime(re.search(r\d{4}.\d{2}.\d{2}.\d{2}:\d{2},time_text).group(),pattern)returndt.strftime(%Y-%m-%d %H:%M:%S)except:continuereturnNone无效数据过滤剔除正文长度过短如小于 50 字、标题为空、链接无效的数据避免低价值内容干扰分析。3.3 异常值处理处理缺失值对缺失发布时间的新闻标记为font stylecolor:rgb(34, 34, 34);unknown/font或根据爬取时间填充处理极端值对正文过长如包含重复内容的新闻截取合理长度或标记为异常数据。四、反爬策略规避与合规性反爬规避技巧随机延时1-3 秒避免高频请求轮换 User-Agent、IP 代理商用代理池遵守font stylecolor:rgb(34, 34, 34);robots.txt/font协议不爬取禁止访问的页面避免爬取登录后的内容减少账号风险。合规性要求仅爬取公开可访问的新闻数据不涉及隐私爬取数据仅用于非商业研究或内部分析不篡改、不传播控制爬取频率避免对目标网站服务器造成压力。五、总结与扩展本文构建的新闻爬虫实现了静态 / 动态页面的适配、核心字段提取与系统化数据清洗可满足基础的新闻数据采集需求。实际应用中可进一步扩展分布式爬虫基于font stylecolor:rgb(34, 34, 34);Scrapy/font框架实现大规模并行爬取数据入库将清洗后的数据存入 MySQL/MongoDB便于后续检索增量爬取基于发布时间实现每日增量更新避免重复爬取情感分析结合 NLP 技术对新闻内容进行情感倾向、关键词提取等深度分析。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询