当前位置: 首页 > news >正文

网站维护学习网站建设法规

网站维护学习,网站建设法规,冷饮店怎么做网站,网站改版 seo结果展示#xff08;文末附完整代码#xff09;#xff1a; 一、引言 在当今数字化时代#xff0c;数据对于各个领域的重要性不言而喻。对于机车行业而言#xff0c;获取丰富的机车品牌、车型及详细信息数据#xff0c;能够为市场分析、消费者研究等提供有力支持。本文将…结果展示文末附完整代码 一、引言 在当今数字化时代数据对于各个领域的重要性不言而喻。对于机车行业而言获取丰富的机车品牌、车型及详细信息数据能够为市场分析、消费者研究等提供有力支持。本文将详细介绍一个使用 Python 编写的机车数据爬虫项目该爬虫能够从特定机车网站抓取机车品牌、车型及其详细信息并将数据存储到 MySQL 数据库中同时也提供了 MongoDB 存储的部分代码示例。 二、项目概述 本项目旨在实现一个自动化的机车数据采集工具通过对具体机车网站的爬取获取机车品牌列表进一步深入到每个品牌的车型页面最终抓取车型的详细信息页面数据。整个过程涵盖了页面请求、数据解析以及数据存储等关键环节下面将逐步展开介绍。 三、代码实现细节 一类的初始化__init__方法 在JiChe类的初始化方法中首先设定了要爬取的基础 URL即http://www.jiche.com/pinpai/这是整个爬虫的起始点。同时定义了请求头信息模拟浏览器发送请求避免被网站识别为爬虫而拒绝访问。在本次代码中使用的是常见的 Chrome 浏览器的 User-Agent 信息。 对于数据库连接部分代码中连接到了本地的 MySQL 数据库。设置了主机地址为127.0.0.1端口号3306用户名root密码921108数据库名称为fjj并创建了数据库游标以便后续执行 SQL 语句操作数据库。虽然代码中也包含了连接 MongoDB 的部分注释代码但本文主要聚焦于 MySQL 数据库的操作与讲解。 class JiChe(object):def __init__(self):初始化 JiChe 类的实例。在这里设置了要爬取的基础 URL、请求头信息以及连接到 MySQL 数据库所需的参数并创建了数据库游标。self.url http://www.jiche.com/pinpai/self.headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.37 }# # 连接 MongoDB# self.mongo_client MongoClient(localhost, 27017)# self.mongo_db self.mongo_client[your_database_name]# self.mongo_collection self.mongo_db[your_collection_name]self.db pymysql.Connect(host127.0.0.1,port3306,userroot,password921108,dbfjj)self.cursor self.db.cursor()二获取页面内容get_page_content方法 get_page_content方法负责发送 HTTP GET 请求获取指定 URL 的页面内容。它接收一个url参数即要请求的页面地址。在方法内部使用requests库发送请求并根据请求头信息进行伪装。同时为了确保正确解析页面中的中文等字符将响应的编码设置为utf8。如果请求过程中出现异常如网络连接问题或页面不存在等将捕获requests.RequestException异常并打印错误信息同时返回None表示获取页面内容失败。 def get_page_content(self, url):发送 HTTP GET 请求获取指定 URL 的页面内容并设置正确的编码。:param url: 要请求的 URL 地址:return: 返回获取到的页面文本内容如果请求失败则返回 Nonetry:response requests.get(url, headersself.headers)response.encoding utf8return response.textexcept requests.RequestException as e:print(f请求页面时出错: {e})return None三解析品牌页面parse_brand_page方法 parse_brand_page方法用于解析品牌页面。它接收品牌页面的文本内容作为参数resp。在方法内部首先使用lxml库的etree模块将页面内容解析为 HTML 元素树。然后通过特定的 XPath 表达式/html/body/div[2]/div[3]/div/div/div[1]/div/div[2]/ul/li找到页面中品牌列表所在的ul标签下的所有li标签。这里的 XPath 表达式是根据目标网站的页面结构确定的如果网站页面结构发生变化可能需要相应调整。 对于每个品牌的li标签进一步提取品牌标题和链接。品牌标题通过title data.xpath(./p/a/title)[0]获取链接通过href data.xpath(./p/a/href)[0]获取。获取到品牌标题和链接后调用parse_model_page方法对每个品牌的车型页面进行进一步解析。如果在提取数据过程中出现索引错误例如 XPath 表达式找不到对应的元素将打印错误信息提示页面结构可能发生变化。 def parse_brand_page(self, resp):解析品牌页面提取品牌列表中的每个品牌的标题和链接然后对每个品牌进一步解析。:param resp: 品牌页面的文本内容html etree.HTML(resp)try:# 通过 XPath 找到 ul 标签下的所有 li 标签这里的 XPath 表达式可能需要根据实际页面结构调整data_list html.xpath(/html/body/div[2]/div[3]/div/div/div[1]/div/div[2]/ul/li)for data in data_list:title data.xpath(./p/a/title)[0] # 获取品牌标题href data.xpath(./p/a/href)[0] # 获取品牌链接self.parse_model_page(title, href)except IndexError:print(在解析品牌页面时提取数据出现索引错误可能页面结构发生变化。)四解析车型页面parse_model_page方法 parse_model_page方法用于解析车型页面。它接收品牌标题title和品牌链接href作为参数。在方法内部首先构建车型页面的 URL即品牌链接加上chexing.html。然后调用get_page_content方法获取车型页面的文本内容。如果获取成功同样使用etree将页面解析为 HTML 元素树。 通过 XPath 表达式//*[idj-model-list]/li找到车型列表所在的li标签。对于每个车型的li标签提取车型标题、链接和型号。车型标题通过title data.xpath(./a/title)[0]获取链接通过href data.xpath(./a/href)[0]获取型号通过type_ data.xpath(./a/text())[0]获取。获取到车型信息后调用parse_detail_page方法对车型的详细信息页面进行解析。如果在提取数据过程中出现索引错误将打印错误信息提示页面结构可能发生变化。 def parse_model_page(self, title, href):解析车型页面提取车型列表中的每个车型的标题、链接和型号然后对每个车型进一步解析。:param title: 品牌标题:param href: 品牌链接url href chexing.htmlresponse_text self.get_page_content(url)if response_text:html etree.HTML(response_text)try:# 通过 XPath 找到特定 id 的 ul 标签下的所有 li 标签这里的 XPath 表达式可能需要根据实际页面结构调整data_list html.xpath(//*[idj-model-list]/li)for data in data_list:title data.xpath(./a/title)[0] # 获取车型标题href data.xpath(./a/href)[0] # 获取车型链接type_ data.xpath(./a/text())[0] # 获取车型型号self.parse_detail_page(title, type_, href)except IndexError:print(在解析车型页面时提取数据出现索引错误可能页面结构发生变化。)五解析车型详细页面parse_detail_page方法 parse_detail_page方法用于解析车型详细页面。它接收车型标题title、车型型号type_和车型链接href作为参数。在方法内部首先调用get_page_content方法获取车型详细页面的文本内容。如果获取成功使用BeautifulSoup库将页面解析为 BeautifulSoup 对象以便更方便地提取页面中的表格数据。 通过find_all(table)方法找到页面中的所有表格标签。对于每个表格首先提取表格的id属性的后四位并加上款字作为一个标识信息kuan然后遍历表格中的每个td标签。对于每个td标签提取其中的文本信息。如果td标签中没有img标签将td标签中的普通文本、span标签中的文本和b标签中的文本进行组合去除首尾空白字符后添加到td_texts列表中。最后将kuan和td_texts列表作为一个子列表添加到detail列表中形成车型详细信息的列表结构。 提取完数据后将数据插入到 MySQL 数据库中。构建 SQL 插入语句sql INSERT INTO 机车 (title, type_, href, detail) VALUES (%s, %s, %s, %s)并设置插入参数params (title, type_, href, str(detail))然后使用数据库游标执行插入操作并提交事务。如果在提取数据过程中出现异常将打印错误信息提示页面结构可能发生变化。 def parse_detail_page(self, title, type_, href):解析车型详细页面提取页面中的表格数据整理成详细信息列表。:param title: 车型标题:param type_: 车型型号:param href: 车型链接response_text self.get_page_content(href)if response_text:soup BeautifulSoup(response_text, html.parser)table_tags soup.find_all(table)detail []try:for table in table_tags:kuan table[id][-4:] 款td_texts []td_texts.append(kuan)for td in table.find_all(td):if td.find(img) is None:other_text td.find(stringTrue, recursiveFalse).strip() if td.find(stringTrue,recursiveFalse) else span_text td.find(span).get_text(stripTrue) if td.find(span) else if span_text 价格:span_text span_text b_text td.find(b).get_text(stripTrue) if td.find(b) else td_texts.append(span_text other_text b_text)detail.append(td_texts)print(title, type_, href, detail)# 将数据插入到 MySQL 数据库sql INSERT INTO 机车 (title, type_, href, detail) VALUES (%s, %s, %s, %s)params (title, type_, href, str(detail))self.cursor.execute(sql, params)self.db.commit()# # 将数据存入 MongoDB# data_to_insert {# title: title,# type: type_,# href: href,# detail: detail# }# self.mongo_collection.insert_one(data_to_insert)except Exception:print(在解析车型详细页面时提取数据出现索引错误可能页面结构发生变化。)六启动爬虫run方法 run方法是整个爬虫的启动入口。在该方法中首先调用get_page_content方法获取品牌页面的内容。如果获取成功即品牌页面内容不为None则调用parse_brand_page方法开始解析品牌页面从而启动整个爬虫的流程后续将依次解析车型页面和车型详细页面直到完成所有数据的抓取和存储。 def run(self):启动整个爬虫流程先获取品牌页面内容然后依次进行解析。brand_page_content self.get_page_content(self.url)if brand_page_content:self.parse_brand_page(brand_page_content)四、项目总结 全部代码 # -*- coding:utf-8 -*- import pymysql import requests from bs4 import BeautifulSoup from lxml import etreeclass JiChe(object):def __init__(self):初始化JiChe类的实例。在这里设置了要爬取的基础URL、请求头信息以及连接到MySQL数据库所需的参数并创建了数据库游标。self.url http://www.jiche.com/pinpai/self.headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.37 }# # 连接MongoDB# self.mongo_client MongoClient(localhost, 27017)# self.mongo_db self.mongo_client[your_database_name]# self.mongo_collection self.mongo_db[your_collection_name]self.db pymysql.Connect(host127.0.0.1,port3306,userroot,password921108,dbfjj)self.cursor self.db.cursor()def get_page_content(self, url):发送HTTP GET请求获取指定URL的页面内容并设置正确的编码。:param url: 要请求的URL地址:return: 返回获取到的页面文本内容如果请求失败则返回Nonetry:response requests.get(url, headersself.headers)response.encoding utf8return response.textexcept requests.RequestException as e:print(f请求页面时出错: {e})return Nonedef parse_brand_page(self, resp):解析品牌页面提取品牌列表中的每个品牌的标题和链接然后对每个品牌进一步解析。:param resp: 品牌页面的文本内容html etree.HTML(resp)try:# 通过XPath找到ul标签下的所有li标签这里的XPath表达式可能需要根据实际页面结构调整data_list html.xpath(/html/body/div[2]/div[3]/div/div/div[1]/div/div[2]/ul/li)for data in data_list:title data.xpath(./p/a/title)[0] # 获取品牌标题href data.xpath(./p/a/href)[0] # 获取品牌链接self.parse_model_page(title, href)except IndexError:print(在解析品牌页面时提取数据出现索引错误可能页面结构发生变化。)def parse_model_page(self, title, href):解析车型页面提取车型列表中的每个车型的标题、链接和型号然后对每个车型进一步解析。:param title: 品牌标题:param href: 品牌链接url href chexing.htmlresponse_text self.get_page_content(url)if response_text:html etree.HTML(response_text)try:# 通过XPath找到特定id的ul标签下的所有li标签这里的XPath表达式可能需要根据实际页面结构调整data_list html.xpath(//*[idj-model-list]/li)for data in data_list:title data.xpath(./a/title)[0] # 获取车型标题href data.xpath(./a/href)[0] # 获取车型链接type_ data.xpath(./a/text())[0] # 获取车型型号self.parse_detail_page(title, type_, href)except IndexError:print(在解析车型页面时提取数据出现索引错误可能页面结构发生变化。)def parse_detail_page(self, title, type_, href):解析车型详细页面提取页面中的表格数据整理成详细信息列表。:param title: 车型标题:param type_: 车型型号:param href: 车型链接response_text self.get_page_content(href)if response_text:soup BeautifulSoup(response_text, html.parser)table_tags soup.find_all(table)detail []try:for table in table_tags:kuan table[id][-4:] 款td_texts []td_texts.append(kuan)for td in table.find_all(td):if td.find(img) is None:other_text td.find(stringTrue, recursiveFalse).strip() if td.find(stringTrue,recursiveFalse) else span_text td.find(span).get_text(stripTrue) if td.find(span) else if span_text 价格:span_text span_text b_text td.find(b).get_text(stripTrue) if td.find(b) else td_texts.append(span_text other_text b_text)detail.append(td_texts)print(title, type_, href, detail)# 将数据插入到MySQL数据库sql INSERT INTO 机车 (title, type_, href, detail) VALUES (%s, %s, %s, %s)params (title, type_, href, str(detail))self.cursor.execute(sql, params)self.db.commit()# # 将数据存入MongoDB# data_to_insert {# title: title,# type: type_,# href: href,# detail: detail# }# self.mongo_collection.insert_one(data_to_insert)except Exception:print(在解析车型详细页面时提取数据出现索引错误可能页面结构发生变化。)def run(self):启动整个爬虫流程先获取品牌页面内容然后依次进行解析。brand_page_content self.get_page_content(self.url)if brand_page_content:self.parse_brand_page(brand_page_content)if __name__ __main__:spider JiChe()spider.run()通过以上代码实现我们成功构建了一个机车数据爬虫。它能够从指定的机车网站抓取品牌、车型及详细信息并存储到 MySQL 数据库中为后续的数据分析和应用提供了数据基础。然而在实际应用中还需要考虑一些问题。例如网站的页面结构可能会发生变化这就需要定期检查和调整 XPath 表达式等解析代码以确保爬虫的稳定性和准确性。同时为了避免对目标网站造成过大的访问压力还可以考虑设置合理的爬取间隔时间遵循网站的 robots.txt 规则等。 此外在数据存储方面虽然本文主要介绍了 MySQL 数据库的使用但 MongoDB 等非关系型数据库也有其优势如更好的扩展性和对复杂数据结构的支持。可以根据实际需求进一步优化数据存储方案或者考虑结合使用多种数据库技术。总之机车数据爬虫项目具有很大的应用潜力和拓展空间通过不断地优化和完善可以为机车行业相关研究和业务提供更强大的数据支持工具。 希望本文能够帮助读者理解机车数据爬虫的基本原理和实现方法读者可以根据自己的需求进一步修改和扩展代码以适应不同的应用场景。 请注意在实际使用中如果涉及到对网站数据的获取需要确保遵守相关网站的使用条款和法律法规避免未经授权的访问和数据滥用等问题本文仅供交流学习请勿滥用。
http://www.hkea.cn/news/14460124/

相关文章:

  • 免费建站免费推广的网站网站描述标签怎么写
  • 网络公司做网站后期注意广东网站建设怎么选
  • 电商网站建设需求分析书昵图网免费素材
  • 网站后缀pw律师关键词推广
  • 网站制作应用知识杰奇网站地图插件
  • 嘉兴网站优化排名全网营销张启明
  • 吉林省可信网站认证牌匾网站设计师联盟
  • 漳浦网站开发中小企业一站式服务平台
  • 网站开发 京东金融投资网站 php源码
  • 做导航网站犯法吗如何租用网站服务器
  • seo基础课程如何优化网站提高排名
  • 网站首页图片代码皋兰县建设局网站
  • 手机网站建设最新报价企业文化墙制作
  • 黑龙江建设人员证件查询网站开发软件的应用
  • 网站设计时尚芜湖公司网站建设
  • 免费推广网站入口2023godaddy网站建设
  • 网站关键词优化报价网站会员注册系统源码
  • 教育网站开发官方网站平台有哪些
  • 安徽网站开发培训价格html网站怎么做
  • 广德做网站设计开发软件著作权证书
  • 网站 第三方登录如何进入微网站
  • 自己怎么做外贸网站空间金山做企业网站
  • 营销网站案例什么意思为拟建设的网站申请一个域名
  • 自己建网站卖东西好卖吗网页设计图片边框代码
  • 江苏网站建设联系方式河南男科医院排名榜
  • 百度多久收录一次网站民族文化网站建设的作用
  • 合肥网站建设 乐云seo从零开始网站建设下载
  • 网站建设开票单位空间设计软件
  • 南海建设局网站教育网站开发需求分析
  • 移动商城网站建设银川做网站