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

大型网站技术方案贵州网络公司网站建设

大型网站技术方案,贵州网络公司网站建设,织梦网站名称,wordpress自动跳转六#xff1a;bs4简介 基本概念#xff1a; 简单来说#xff0c;Beautiful Soup是python的一个库#xff0c;最主要的功能是从网页抓取数据官方解释如下#xff1a; Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。 它是一个工具箱…六bs4简介 基本概念 简单来说Beautiful Soup是python的一个库最主要的功能是从网页抓取数据官方解释如下 Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。 它是一个工具箱通过解析文档为用户提供需要抓取的数据因为简单 所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航查找修改文档的方式。BeautifulSoup会帮节省数小时甚至数天的工作时间。BeautifulSoup3目前已经停止开发官网推荐在现在的项目中使用BeautifulSoup4。 bs4的安装 由于 Bautiful Soup 是第三方库因此需要单独下载下载方式非常简单执行以下命令即可安装 pip install bs4 由于BS4 解析页面时需要依赖 文档解析器所以还需要安装 lxml 作为解析库 所以我们还需要安装lxml安装方式如下 pip install lxml Python 也自带了一个文档解析库 html.parser 但是其解析速度要稍慢于 lxml。除了上述解析器外还可以使用 html5lib 解析器安装方式如下 pip install html5lib 注意bs4是依赖lxml库的只有先安装lxml库才可以安装bs4库 文档解析器优缺点 下表列出了主要的解析器,以及它们的优缺点: 推荐使用lxml作为解析器,因为效率更高。在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定。 提示: 如果一段HTML或XML文档格式不正确的话,那么在不同的解析器中返回的结果可能是不一样的。因此我们可以根据情况去选择对应的文档解析器。具体情况具体分析。 bs4的使用 快速开始 创建BS4解析对象是万事开头的第一步这非常地简单语法格式如下所示 1、导入解析包 from bs4 import BeautifulSoup 2、创建beautifulsoup解析对象 soup BeautifulSoup(html_doc, ‘html.parser’) 上述代码中html_doc 表示要解析的文档而 html.parser 表示解析文档时所用的解析器此处的解析器也可以是 ‘lxml’ 或者 ‘html5lib’ from bs4 import BeautifulSouphtml_doc htmlheadtitleThe Dormouses story/title/head body p classtitlebThe Dormouses story/b/pp classstoryOnce upon a time there were three little sisters; and their names were a hrefhttp://example.com/elsie classsister idlink1Elsie/a, a hrefhttp://example.com/lacie classsister idlink2Lacie/a and a hrefhttp://example.com/tillie classsister idlink3Tillie/a; and they lived at the bottom of a well./pp classstory.../p# 创建一个soup对象 soup BeautifulSoup(html_doc,lxml) print(soup,type(soup)) # 格式化文档输出 print(soup.prettify()) # 获取title标签内容 titleThe Dormouses story/title print(soup.title) # 获取title标签名称: title print(soup.title.name) # title标签里面的文本内容: The Dormouses story print(soup.title.string) # 获取p段落 print(soup.p)bs4的对象种类 tag : html中的标签。 可以通过BeautifulSoup分析Tag的具体内容具体格式为soup.name其中name是html下的标签。 NavigableString : 标签中的文本对象。BeautifulSoup : 整个html文本对象。 可以作为Tag对象。 Comment : 特殊的NavigableString对象如果html标签中有注释则可过滤注释符号并保留注释文本。 from bs4 import BeautifulSouphtml_doc htmlheadtitleThe Dormouses story/title/head body p classtitlebThe Dormouses story/b/pp classstoryOnce upon a time there were three little sisters; and their names were a hrefhttp://example.com/elsie classsister idlink1Elsie/a, a hrefhttp://example.com/lacie classsister idlink2Lacie/a and a hrefhttp://example.com/tillie classsister idlink3Tillie/a; and they lived at the bottom of a well./pp classstory.../ptag : 标签 NavigableString : 可导航的字符串 BeautifulSoup : bs对象 Comment : 注释soup BeautifulSoup(html_doc, html.parser) # print(soup) tag:标签 print(type(soup.title)) print(type(soup.p)) print(type(soup.a))NavigableString : 可导航的字符串 from bs4.element import NavigableString print(type(soup.title.string))BeautifulSoup : bs对象 soup BeautifulSoup(html_doc, html.parser) print(type(soup))Comment : 注释 html b!--同学们好呀加油学习--/b soup2 BeautifulSoup(html, html.parser) print(soup2.b.string, type(soup2.b.string)) 遍历文档树 遍历子节点 contents 返回的是一个所有子节点的列表了解children 返回的是一个子节点的迭代器了解descendants 返回的是一个生成器遍历子子孙孙了解string 获取标签里面的内容掌握strings 返回是一个生成器对象用过来获取多个标签内容掌握stripped_strings 和strings 基本一致 但是它可以把多余的空格去掉掌握 遍历父节点了解 parent 直接获得父节点parents 获取所有的父节点 遍历兄弟节点了解 next_sibling 下一个兄弟结点previous_sibling 上一个兄弟结点next_siblings 下一个所有兄弟结点previous_siblings上一个所有兄弟结点 from bs4 import BeautifulSouphtml_doc html headtitleThe Dormouses story/title/head body p classtitlebThe Dormouses story/b/p p classstory Once upon a time there were three little sisters; and their names were a hrefhttp://example.com/elsie classsister idlink1Elsie/a, a hrefhttp://example.com/lacie classsister idlink2Lacie/a and a hrefhttp://example.com/tillie classsister idlink3Tillie/a; and they lived at the bottom of a well./p p classstory.../p /body /html生成器 迭代器 可迭代对象 三者之间的关系 # 获取单个标签中的内容 soup BeautifulSoup(html_doc, lxml) r1 soup.title.string # 获取标签里面的内容 print(r1)# 获取html中所有的标签内容 r2 soup.html.strings # 返回是一个生成器对象用过来获取多个标签内容 print(r2) for i in r2:print(i)r3 soup.html.stripped_strings # 和strings基本一致 但是它可以把多余的空格去掉 print(r3) # 生成器对象 generator object Tag._all_strings at 0x000001A73C538AC8 for i in r3:print(i)搜索文档树 find() find()方法返回搜索到的第一条数据 find_all() find_all()方法以列表形式返回所有的搜索到的标签数据 实例应用 html table classtablelist cellpadding0 cellspacing0tbodytr classhtd classl width374职位名称/tdtd职位类别/tdtd人数/tdtd地点/tdtd发布时间/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id33824keywordspythontid87lid221822989-金融云区块链高级研发工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-25/td/trtr classoddtd classl squarea target_blank hrefposition_detail.php?id29938keywordspythontid87lid221822989-金融云高级后台开发/a/tdtd技术类/tdtd2/tdtd深圳/tdtd2017-11-25/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id31236keywordspythontid87lid2218SNG16-腾讯音乐运营开发工程师深圳/a/tdtd技术类/tdtd2/tdtd深圳/tdtd2017-11-25/td/trtr classoddtd classl squarea target_blank hrefposition_detail.php?id31235keywordspythontid87lid2218SNG16-腾讯音乐业务运维工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-25/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id34531keywordspythontid87lid2218TEG03-高级研发工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/trtr classoddtd classl squarea target_blank hrefposition_detail.php?id34532keywordspythontid87lid2218TEG03-高级图像算法研发工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id31648keywordspythontid87lid2218TEG11-高级AI开发工程师深圳/a/tdtd技术类/tdtd4/tdtd深圳/tdtd2017-11-24/td/trtr classoddtd classl squarea target_blank hrefposition_detail.php?id32218keywordspythontid87lid221815851-后台开发工程师/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id32217keywordspythontid87lid221815851-后台开发工程师/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/trtr classoddtd classl squarea idtest classtest target_blank hrefposition_detail.php?id34511keywordspythontid87lid2218SNG11-高级业务运维工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/tr/tbody /table获取所有的tr标签 # 1 获取所有的tr标签 trs soup.find_all(tr) # 这是个列表过滤器 for tr in trs:print(tr)print(* * 150)获取第二个tr标签 # 2 获取第二个tr标签 tr soup.find_all(tr)[1] print(tr)获取获取所有的class even的tr标签 trs soup.find_all(tr, class_even) # 但这里如果直接用class不行 class是作为我们的关键字 # trs soup.find_all(tr, attrs{class: even}) 这两种方式都可 for tr in trs:print(tr)print(* * 150)获取所有a标签里面的href属性值 # 5 获取所有的a标签的href属性 a_li soup.find_all(a) for a in a_li:href a.get(href)print(href)获取所有的岗位信息。 trs soup.find_all(tr)[1:] for tr in trs:tds tr.find_all(td)# print(tds)job_name tds[0].stringprint(job_name)select()方法 我们也可以通过css选择器的方式来提取数据。但是需要注意的是这里面需要我们掌握css语法https://www.w3school.com.cn/cssref/css_selectors.asp from bs4 import BeautifulSouphtml table classtablelist cellpadding0 cellspacing0tbodytr classhtd classl width374职位名称/tdtd职位类别/tdtd人数/tdtd地点/tdtd发布时间/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id33824keywordspythontid87lid221822989-金融云区块链高级研发工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-25/td/trtr classoddtd classl squarea target_blank hrefposition_detail.php?id29938keywordspythontid87lid221822989-金融云高级后台开发/a/tdtd技术类/tdtd2/tdtd深圳/tdtd2017-11-25/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id31236keywordspythontid87lid2218SNG16-腾讯音乐运营开发工程师深圳/a/tdtd技术类/tdtd2/tdtd深圳/tdtd2017-11-25/td/trtr classoddtd classl squarea target_blank hrefposition_detail.php?id31235keywordspythontid87lid2218SNG16-腾讯音乐业务运维工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-25/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id34531keywordspythontid87lid2218TEG03-高级研发工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/trtr classoddtd classl squarea target_blank hrefposition_detail.php?id34532keywordspythontid87lid2218TEG03-高级图像算法研发工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id31648keywordspythontid87lid2218TEG11-高级AI开发工程师深圳/a/tdtd技术类/tdtd4/tdtd深圳/tdtd2017-11-24/td/trtr classoddtd classl squarea target_blank hrefposition_detail.php?id32218keywordspythontid87lid221815851-后台开发工程师/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/trtr classeventd classl squarea target_blank hrefposition_detail.php?id32217keywordspythontid87lid221815851-后台开发工程师/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/trtr classoddtd classl squarea idtest classtest target_blank hrefposition_detail.php?id34511keywordspythontid87lid2218SNG11-高级业务运维工程师深圳/a/tdtd技术类/tdtd1/tdtd深圳/tdtd2017-11-24/td/tr/tbody /tablesoup BeautifulSoup(html, lxml)# 获取所有的tr标签 # trs soup.select(tr) # for i in trs: # print(i)# 获取第二个tr标签 # tr soup.select(tr)[1] # print(tr)# 获取所有class等于even的tr标签 # trs soup.select(.even)# 获取所有的a标签的href属性 # a_tags soup.select(a) # print(a_tags) # for a in a_tags: # href a.get(href) # print(href)# 获取所有的职位信息 trs soup.select(tr)[1:] print(trs) for tr in trs:print(tr)print(list(tr.strings))info list(tr.stripped_strings)[0]print(info)修改文档树 修改tag的名称和属性修改string 属性赋值,就相当于用当前的内容替代了原来的内容append() 像tag中添加内容,就好像Python的列表的 .append() 方法decompose() 修改删除段落对于一些没有必要的文章段落我们可以给他删除掉 from bs4 import BeautifulSouphtml_doc htmlheadtitleThe Dormouses story/title/head body p classtitlebThe Dormouses story/b/pp classstoryOnce upon a time there were three little sisters; and their names were a hrefhttp://example.com/elsie classsister idlink1Elsie/a, a hrefhttp://example.com/lacie classsister idlink2Lacie/a and a hrefhttp://example.com/tillie classsister idlink3Tillie/a; and they lived at the bottom of a well./pp classstory.../psoup BeautifulSoup(html_doc, html.parser)● 修改tag的名称和属性 ● 修改string 属性赋值,就相当于用当前的内容替代了原来的内容 ● append() 像tag中添加内容,就好像Python的列表的 .append() 方法 ● decompose() 修改删除段落对于一些没有必要的文章段落我们可以给他删除掉# 修改tag的名称和属性 tag_p soup.p print(tag_p) tag_p.name w tag_p[class] content print(tag_p)# 修改string 属性赋值,就相当于用当前的内容替代了原来的内容 tag_p soup.p print(tag_p.text) tag_p.string you need python print(tag_p.text)# append() 像tag中添加内容,就好像Python的列表的 .append() 方法 tag_p soup.p print(tag_p) tag_p.append(真的C!) print(tag_p)# # decompose() 修改删除段落对于一些没有必要的文章段落我们可以给他删除掉 r soup.title print(r) r.decompose() print(soup)csv模块 什么是csv? CSV (Comma Separated Values)即逗号分隔值也称字符分隔值因为分隔符可以不是逗号是一种常用的文本格式用以存储表格数据包括数字或者字符。很多程序在处理数据时都会碰到csv这种格式的文件。python自带了csv模块专门用于处理csv文件的读取 csv模块的使用 写入csv文件 1 通过创建writer对象主要用到2个方法。一个是writerow写入一行。另一个是writerows写入多行 2 使用DictWriter 可以使用字典的方式把数据写入进去 读取csv文件 1 通过reader()读取到的每一条数据是一个列表。可以通过下标的方式获取具体某一个值 2 通过DictReader()读取到的数据是一个字典。可以通过Key值(列名)的方式获取数据 csv文件操作应用 csv写入文件 import csvpersons [(岳岳, 20, 175), (月月, 22, 178), (张三, 20, 175)] headers (name, age, heigth) with open(persons.csv, modew, encodingutf-8,newline)as f:writer csv.writer(f) # 创建writer对象writer.writerow(headers) # 将表头写入进去for i in persons:writer.writerow(i) # 将列表中的值写入进去# Dictwriter 写入字典数据格式 import csvpersons [{name: 岳岳, age: 18, gender: 男},{name: 岳岳2, age: 18, gender: 男},{name: 岳岳3, age: 18, gender: 男} ]headers (name, age, gender) with open(person2.csv, modew, encodingutf-8,newline)as f:writer csv.DictWriter(f, headers)writer.writeheader() # 写入表头writer.writerows(persons)csv读取文件 # 方式一 import csv with open(persons.csv,moder,encodingutf-8,newline)as f:reader csv.reader(f)print(reader) # _csv.reader object at 0x0000021D7424D5F8for i in reader:print(i)# 方式二 import csv with open(person2.csv, moder, encodingutf-8,newline)as f:reader csv.DictReader(f)print(reader) # _csv.reader object at 0x0000021D7424D5F8for i in reader:# print(i)for j, k in i.items():print(j, k)bs4实例应用 from bs4 import BeautifulSoup import requests import csv 目标url http://www.weather.com.cn/textFC/hb.shtml 需求: 爬取全国所有城市的温度(最低气温) 并保存到csv文件中 保存格式:[{city:北京,temp:5℃},{xxx:xxx,xxx:xxx},.....] 涉及技术: request csv bs4思路与页面分析: 1 获取网页源码并创建soup对象 2 将拿到的数据进行解析拿到目标数据2.1 先找到整页的div class conMidtab标签2.2 接下来找到它下面的每一个省或者是直辖市的table标签2.3 对拿到的tables数据进行过滤 找到table标签下面所有的tr标签 需要注意要把前2个tr标签过滤掉2.4 再找到tr标签里面所有的td标签(第0个就是城市 倒数第二个就是温度) 3 将获取的数据进行存储 # 定义一个函数用于获取网页源码并解析数据 def getscroce(every_url):# 目标url# url http://www.weather.com.cn/textFC/hb.shtml# 请求头数据headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36}response requests.get(every_url, headersheaders)response.encoding utf-8# 获取到的网页源码html response.text# 将获取的网页源代码进行解析# 1 创建一个soup对象soup BeautifulSoup(html, html5lib)# print(soup)# 2 先找到整页的div class conMidtab标签conMidtab soup.find(div, class_conMidtab)# print(conMidtab)# 3接下来找到它下面的每一个省或者是直辖市的table标签tables conMidtab.find_all(table)# print(tables)# 4对拿到的tables数据进行过滤 找到table标签下面所有的tr标签(需要注意要把前2个tr标签过滤掉)# 定义一个列表 将字典数据进行存储 然后准备写入csvtemplist []for table in tables:trs table.find_all(tr)[2:]# print(trs)for index, tr in enumerate(trs):# print(index,tr)# 在找到tr标签里面所有的td标签(第0个就是城市 倒数第二个就是温度)tds tr.find_all(td)# print(tds)# 获取城市存在的td标签city_td tds[0]if index 0:city_td tds[1]# print(city_td)# 定义一个字典用于保存数据 城市和温度tempdict {}# 获取城市文本数据city list(city_td.stripped_strings)[0]# print(city)# 获取最低温度temp_td tds[-2]temp list(temp_td.stripped_strings)[0]# print(temp)tempdict[city] citytempdict[temp] temp# 将字典数据添加到列表中templist.append(tempdict)# print(templist) # 通过打印发现 {city: 河北, temp: 20} 这个根本不存在如果是直辖市你取第0个td标签没有问题所有的数据也是正常的如果是省你不能取第0个td标签了(省的名字),取第一个td标签但是所有的都取第一个td那么这样其它城市又不对了。因为其它的城市都是第0个td标签我们只需要做一个判断什么时候取第0个td 什么时候取第一个td# 将获取的数据进行返回 用于下一步进行数据的存储return templist# 定义一个函数用于保存解析到的数据 def writeData(alltemplist):header (city, temp)with open(weather.csv, modew, encodingutf-8, newline)as f:# 创建写入对象writer csv.DictWriter(f, header)# 写入表头writer.writeheader()# 写入数据writer.writerows(alltemplist)# 定义一个主函数 用来执行各个函数 def main():# 定义一个列表保存全国城市的温度alltemplist []model_url http://www.weather.com.cn/textFC/{}.shtml# 定义一个列表 用于保存八大地区的urlurlkey_list [hb, db, hd, hz, hn, xb, xn, gat]for i in urlkey_list:every_url model_url.format(i)print(every_url)# templist getscroce() # 舍去alltemplist getscroce(every_url)# print(templist)# 将获取的数据进行传递 用于保存csvwriteData(alltemplist)# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列同时列出数据和数据下标一般用在 for 循环当中。# for i,j in enumerate(range(10)):# print(i,j)if __name__ __main__:main()
http://www.pierceye.com/news/726785/

相关文章:

  • 河南网站优化要多少钱网站技术有哪些
  • 域名还在备案可以做网站吗高端设计公司名字大全
  • 简洁的门户网站网站开发文案
  • 信息网站 模板中国建设银行手机银行下载官方网站
  • 番禺网站开发设计小程序后端数据库搭建
  • 丰都集团网站建设云南网站开发公司
  • 赶集网的二级域名网站怎么做海南网站建设报价方案
  • dede做手机网站网站开发小作业
  • 网站建设推广ppt室内设计知名网站
  • asp 网站源码网站搭建好了怎么上到服务器
  • 网站有什么到期wordpress怎么编辑保存
  • 服务器添加网站300500启迪设计
  • 上海市建设安全协会网站移动端页面
  • 手机做网站公司成都住房和城乡建设厅官网
  • 锋创科技园网站建设网站开发ide php
  • 山东做网站的公司有哪些电脑怎么制作视频短片
  • 书画网站 建站维护网站成本
  • 什么事网站开发网站服务器租用报价
  • 做黏土的网站青岛网站建设微动力
  • 建网站权威公司广告发布平台
  • 自助游网站开发分析报告总结怎么注册公司微信公众号
  • 网站开发公司业务员培训黄聪wordpress
  • 网站规划与建设ppt模板下载响应式网站模板费用
  • 江苏商城网站建设服务网站建设优化石家庄
  • 高师院校语言类课程体系改革与建设 教学成果奖申报网站wordpress 4.8.2 漏洞
  • 以小说名字做网站的小说网wordpress的数据库主机
  • 永嘉高端网站建设价格h5页面制作多少钱
  • 北京网站建设课程培训WordPress分类id在哪
  • 宁夏网站备案青岛专业网站建设公司
  • 廊坊营销网站团队佛山市创意动力信息科技有限公司