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

自己做网站怎么买域名阿里云心选建站

自己做网站怎么买域名,阿里云心选建站,中信建设有限责任公司怎么样,网站建设默认字体上一篇我们学习了BeautifulSoup的基本用法#xff0c;本节我们使用它来爬取豆瓣图书Top250。一、网页分析我们爬取的网页的url是https://book.douban.com/top250?icnindex-book250-all。首页如图与豆瓣电影Top250差不多#xff0c;将页面拉到最底部#xff0c;可以看到分页…上一篇我们学习了BeautifulSoup的基本用法本节我们使用它来爬取豆瓣图书Top250。一、网页分析 我们爬取的网页的url是https://book.douban.com/top250?icnindex-book250-all。首页如图与豆瓣电影Top250差不多将页面拉到最底部可以看到分页列表并且每一页的url也是以25递增所以爬取思路与豆瓣电影Top250一致。二、爬取目标 我们本篇要爬取的信息包括书名、作者、出版社、价格、评分、推荐语。三、爬取首页网页获取源代码import requestsdef get_html(url):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36}html requests.get(url,headersheaders)return html.textif __name__ __main__:url https://book.douban.com/top250?start0html get_html(url)print(html)输出结果解析提取所需信息 如图查看源代码我们可以知道页面中书的信息均包含在一个个table标签中所以我们可以先用CSS选择器将一个个table节点选出来然后在使用循环提取每一本书的信息。提取table节点的代码如下def parse_html(html):soup BeautifulSoup(html,lxml)books soup.select(div.article div.indent table)print(books)运行结果如下可以看到输出为列表并且第一个元素包含《追风筝的人》的相关信息。这里我们使用BeautifulSoup中的select()加CSS选择器提取table节点。传入的CSS选择器为div.article div.indent table。其中div.article的意思为选择包含属性classarticle的div标签然后跟空格代表嵌套关系表示接着选择该div下的包含classindent的div标签再跟空格表示接着嵌套继续选择第二个div标签下的table标签。 接下来对选出来的table标签循环在每一个table标签中去提取图书信息。这里我们先提出书名信息先看一种写法代码如下def parse_html(html):soup BeautifulSoup(html,lxml)books soup.select(div.article div.indent table)for book in books:title book.div.a.stringprint(title)输出结果可以看到确实获取到了书名信息但是有些书的书名没有得到返回了None这就不是很完美了呀。我们先解释写这里获取标题的方法这里我们使用了节点选择器的嵌套选择首先选择了div标签然后继续选择其下的a标签。为什么不直接选择a标签呢因为包含书名信息的a标签是table节点下的第二个a标签直接选择a只会选择第一个不包含书名信息的那个a标签。下面我们来研究下为什么使用string属性不能获取某些书的书名信息我们先将获取到的a标签打印出来。def parse_html(html):soup BeautifulSoup(html,lxml)books soup.select(div.article div.indent table)for book in books:title book.div.aprint(title)并截取返回None的那本书的位置可以看到《三体》这本书的a标签的内部结构不同所以导致调用string属性返回None但是我们可以注意到每条a标签都包含title属性我们是否可以通过title属性获取书名def parse_html(html):soup BeautifulSoup(html,lxml)books soup.select(div.article div.indent table)for book in books:title book.div.a[title]print(title)输出结果如下可以看到不仅获取到了想要的信息而数据更加干净。这里获取title部分说了这么多主要是想告诉大家一个获取相同的信息有很多的方法当一种获取方式不理想时可以考虑换一种思路。 接下来我们一次性将所有的信息抓取下来。def parse_html(html):soup BeautifulSoup(html,lxml)tables soup.select(div.article div.indent table)books []for table in tables:title table.div.a[title]由于information中包含多个信息某些书与大多数书的信息格式不一致在进行列表索引的时候非常容易引起IndexError异常为了保证爬虫的健壮性我们对该异常进行处理information table.p.stringinformations information.split(/)while(len(informations)4):del informations[1]try:author informations[0]press informations[1]date informations[2]price informations[3]except IndexError:continue像这样子进行数据提取很容易遇到某一个特殊部分的网页结构与大部分的不一样这会导致首页能抓取到的节点在该部分会返回None从而导致调用string属性产生AttributeError异常我们需要进行异常处理try:score table.find(attrs{class:rating_nums}).stringrecommendation table.find(attrs{class:inq}).stringexcept AttributeError:continuebook {书名:title,作者:author,出版社:press,出版日期:date,价格:price,评分:score,推荐语:recommendation}books.append(book)return books输出结果这里可以看到输出结果虽然为字典但是不好看。保存为字典格式只是方便存储与后续使用假如我们要将其打印到屏幕上的话并不好看所以我们接着写一个打印函数专门用于输出def print_(books):for book in books:print(**50)for key,value in zip(book.keys(),book.values()):print(key:value)print(**50)我们将爬取首页的代码汇总在一起看看输出效果import requests from bs4 import BeautifulSoupdef get_html(url):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36}html requests.get(url,headersheaders)return html.textdef parse_html(html):soup BeautifulSoup(html,lxml)tables soup.select(div.article div.indent table)books []for table in tables:title table.div.a[title]由于information中包含多个信息某些书与大多数书的信息格式不一致在进行列表索引的时候非常容易引起IndexError异常为了保证爬虫的健壮性我们对该异常进行处理information table.p.stringinformations information.split(/)while(len(informations)4):del informations[1]try:author informations[0]press informations[1]date informations[2]price informations[3]except IndexError:continue像这样子进行数据提取很容易遇到某一个特殊部分的网页结构与大部分的不一样这会导致首页能抓取到的节点在该部分会返回None从而导致调用string属性产生AttributeError异常我们需要进行异常处理try:score table.find(attrs{class:rating_nums}).stringrecommendation table.find(attrs{class:inq}).stringexcept AttributeError:continuebook {书名:title,作者:author,出版社:press,出版日期:date,价格:price,评分:score,推荐语:recommendation}books.append(book)return booksdef print_(books):for book in books:print(**50)for key,value in zip(book.keys(),book.values()):print(key:value)print(**50)if __name__ __main__:url https://book.douban.com/top250?start0html get_html(url)books parse_html(html)print_(books)输出结果 注意这里我们没有写存储的相关函数因为这里只为演示BeautifulSoup的用法假如需要存储数据参考爬虫系列第三篇 使用requests与正则表达式爬取豆瓣电影Top250四、爬取整个豆瓣图书Top250 与前面个爬虫实例一样构造url列表使用循环即可。全部代码如下import requests from bs4 import BeautifulSoupdef get_html(url):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36}html requests.get(url,headersheaders)return html.textdef parse_html(html):soup BeautifulSoup(html,lxml)tables soup.select(div.article div.indent table)books []for table in tables:title table.div.a[title]由于information中包含多个信息某些书与大多数书的信息格式不一致在进行列表索引的时候非常容易引起IndexError异常为了保证爬虫的健壮性我们对该异常进行处理information table.p.stringinformations information.split(/)while(len(informations)4):del informations[1]try:author informations[0]press informations[1]date informations[2]price informations[3]except IndexError:continue像这样子进行数据提取很容易遇到某一个特殊部分的网页结构与大部分的不一样这会导致首页能抓取到的节点在该部分会返回None从而导致调用string属性产生AttributeError异常我们需要进行异常处理try:score table.find(attrs{class:rating_nums}).stringrecommendation table.find(attrs{class:inq}).stringexcept AttributeError:continuebook {书名:title,作者:author,出版社:press,出版日期:date,价格:price,评分:score,推荐语:recommendation}books.append(book)return booksdef print_(books):for book in books:print(**50)for key,value in zip(book.keys(),book.values()):print(key:value)print(**50)if __name__ __main__:urls [fhttps://book.douban.com/top250?start{i*25} for i in range(0,10)]for url in urls: html get_html(url)books parse_html(html)print_(books)五、总结通过本篇的学习读者应该着重掌握BeautifulSoup库三种节点选择方式的灵活运用对可能的异常要进行处理请求部分的异常一般不用处理与正则表达式进行优劣比较读者可以自行将正则表达式与BeautifulSoup结合起来灵活使用 这里解释一下为什么请求部分的异常一般不需要处理因为请求出现异常一般意味着url错误、网络连接有问题等这些异常都需要我们处理好而不是用try...except语句跳过它否则爬虫无法继续。如果觉得本篇文章不错欢迎关注我的爬虫系列教程公众号【痕风雨】一起学习交流。
http://www.yutouwan.com/news/212866/

相关文章:

  • 网站建设网络推广平台网站关于我们页面设计
  • 百度收录公司网站wordpress后台账户密码登不进
  • 计算机 网站开发 文章百度网页版官网首页
  • 深圳网站建设服务哪个便宜啊柳市网站建设哪家好
  • 网站建设合同怎么写定制网站制作费用
  • 首页关键词是不是一个网站的核心关键词所在企业邮箱怎么申请免费的
  • 学院网站设计案例设计公司的网站建设
  • 商务型网站建设做网站公司那家好
  • 江苏备案网站名称html代码小游戏
  • 赤峰市建设网站建站多少钱一个
  • 建外贸企业网站校园网络建设
  • 太原网站制作小程序手机网站绑定域名是什么意思
  • 网站建设图片教程衡阳网站优化公司
  • 引擎网站推广法河北seo公司
  • 网站建设成功案例宣传豌豆荚官网入口
  • 提供网站建设哪家好企业163邮箱登录入口
  • 设计了网站flashfxp怎么做网站
  • 外包网站设计公司上海建设工程交易服务中心
  • 泉州网站建设选择讯呢网站建设2018需要什么
  • 汽车网站开发背景用html表格做的网站
  • 深圳夫博网站建设有限公司白人与黑人做爰网站
  • 百度索引量和网站排名佳木斯哈尔滨网站建设
  • 建网站的软件嘉定公司网站设计
  • 做网站图片不够大服务器网络
  • 株洲网站建设企业windows优化大师
  • 专门做消防器材的网站找游戏的手游平台
  • 哈密地网站建设wordpress 多用户插件
  • 制作网站流程图东莞网站建设乐云seo在线制作
  • 天津市住房和城乡建设厅官方网站app开发费用
  • 大连宏帝建设网站seo优化排名易下拉软件