一、存入csv

上次爬取到了所需要的内容,但是没有存入到csv中,这次存入了csv文件中,代码如下:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import csv
  4. import io
  5. import sys
  6. sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
  7.  
  8. def get_url():#得到A-Z所有网站
  9. urls=[]
  10. for i in range(1,27):
  11. i = chr(i+96)
  12. urls.append('http://www.thinkbabynames.com/start/0/%s'%i)
  13. return urls
  14. pass
  15.  
  16. def get_text(url):#得到所有名字以及连接,爬取所需内容
  17. headers = {'Cookie':"User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36"}
  18. docx=requests.get(url)
  19. soup=BeautifulSoup(docx.content,'html.parser')
  20. c_txt1=soup.find('section',{'id':'index'}).findAll('b')
  21. for x in c_txt1:
  22. s=[]
  23. if x.find('a'):
  24. name=x.find('a')['href'].split("/")[-1]#使用正则表达式获得所有名字
  25. #url.append('http://www.thinkbabynames.com/meaning/0/%s'%i)#获得所有名字详情页链接
  26. if name:
  27. r=requests.get('http://www.thinkbabynames.com/meaning/0/%s'%name)
  28. result=r.text
  29. bs=BeautifulSoup(result,'html.parser')
  30. li=bs.find('div',class_='content').find('h1')
  31. Enname=li.text[8::1]#使用切片语法获得详情页名字(s[x:y:z]x为起始,y为终止,z为步长)
  32. Gender=li.text[1:8:1]#使用切片语法获得详情页名字性别
  33. li1=bs.find('section',id='meaning').find('p')
  34. Description=li1.text
  35. #保存名字,性别,简介到s中
  36. s.append(Enname)
  37. s.append(Gender)
  38. s.append(Description)
  39. save_text(s)
  40. return s
  41. pass
  42.  
  43. def save_text(s):#保存到csv
  44. with open('text.csv','a',encoding='utf_8_sig',newline='')as f:
  45. writer = csv.writer(f)
  46. writer.writerow(s)
  47.  
  48. if __name__ == '__main__':
  49. urls=get_url();
  50. for url in urls:
  51. get_text(url)

如上把得到的名字,性别,以及简介存入s中,再把s存到csv中。

二、csv文件截图

三、遇到的问题及解决方案

(1)爬取到所有名字时不能获得文本内容

解决方案:选择合适的正则表达式

  1. docx=requests.get(url)
  2. soup=BeautifulSoup(docx.content,'html.parser')
  3. c_txt1=soup.find('section',{'id':'index'}).findAll('b')
  4. for x in c_txt1:
  5. s=[]
  6. if x.find('a'):
  7. name=x.find('a')['href'].split("/")[-1]#使用正则表达式获得所有名字

(2)获取名字详情页内容时,名字和性别在一起。

解决方案:使用切片语法分别获得名字和姓名分开存取

  1. li=bs.find('div',class_='content').find('h1')
  2. Enname=li.text[8::1]#使用切片语法获得详情页名字(s[x:y:z]x为起始,y为终止,z为步长)
  3. Gender=li.text[1:8:1]#使用切片语法获得详情页名字性别

(3)在笔记本上运行时,访问量大

解决方案:分开来爬

如上图,改变range()函数中的数字来选择爬取部分网站以减少访问量。

这样既能够满足爬取要求,也不会被网站禁止爬取。

python大作业二的更多相关文章

  1. python大作业

    爬取西刺代理 生成请求头 #encoding = utf-8; __all__ = ("Header"); import random; class Header(object): ...

  2. python大作业-图书管理系统

    #缺少循环执行和错误处理 #add()函数 添加了循环执行 #错误处理:regist()函数 登录和退出选择的时候添加了错误处理 import sys import importlib importl ...

  3. 数据库大作业--由python+flask

    这个是项目一来是数据库大作业,另一方面也算是再对falsk和python熟悉下,好久不用会忘很快. 界面相比上一个项目好看很多,不过因为时间紧加上只有我一个人写,所以有很多地方逻辑写的比较繁琐,如果是 ...

  4. Python学习之编写三级菜单(Day1,作业二)

    作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...

  5. c++小学期大作业攻略(二)整体思路+主界面

    写在前面:如果我曾经说过要在第一周之内写完大作业,那……肯定是你听错了.不过如果我在写的时候有攻略看的话应该可以轻松地在4~5天内做完,然后觉得写攻略的人是个小天使吧(疯狂暗示).出于给大家自由发挥的 ...

  6. 【大数据应用技术】作业十二|Hadoop综合大作业

    本次作业的要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 前言 本次作业是在<爬虫大作业>的基础上进行的 ...

  7. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

  8. 程设大作业xjb写——魔方复原

    鸽了那么久总算期中过[爆]去[炸]了...该是时候写写大作业了 [总不能丢给他们不会写的来做吧 一.三阶魔方的几个基本定义 ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B UD之间的叫E,LR ...

  9. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

随机推荐

  1. Jquery判断当前时PC端,移动端,平板端屏幕

    $(function(){     // console.log(navigator.userAgent);     var os = function (){       var ua = navi ...

  2. 【CuteJavaScript】ES2019 新特性汇总

    最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~ 另外之前也整理了 <ES6 ...

  3. 修改IE默认页的指向

    方法一: 1.打开IE浏览器 → 单击 工具 → Internet选项 2.填上你要设置的主页网址 3.重启IE浏览器,成功设置主页 方法二: 1.按住键盘"win+r" → 输入 ...

  4. Mock接口依赖的使用

    mock 能做什么 1.前后端联调,如果你是一个前端页面开发,现在需要开发一个功能:下一个订单,支付页面的接口,根据支付结果,支付成功,展示支付成功页,支付失败,展示支付失败页.要完成此功能,你需要 ...

  5. docker进阶之路-基础篇 | 一:环境搭建

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061747.html 一.准备工作 查看内核 Docker 要求 CentOS ...

  6. 一个非常美的FlutterUI组件扩展集:FLUI

    项目地址 FLUI 官网 下载 Demo APK 体验 这是一个群内的网友写的,感觉里面的组件风格非常美,封装的挺到位的,在此推荐给大家,具体可以参考学习. 可以学到的知识还是挺多的,组件UI封装可以 ...

  7. NodeJS2-4环境&调试----global变量

    global全局对象,希望把全局访问到的对象,属性和方法等挂到global对象上,除了用户自定义的方法外,global本身默认带着一些常用的属性和方法的 CommonJS Buffer.process ...

  8. [ASP.NET Core 3框架揭秘] 配置[3]:配置模型总体设计

    在<读取配置数据>([上篇],[下篇])上面一节中,我们通过实例的方式演示了几种典型的配置读取方式,接下来我们从设计的维度来重写认识配置模型.配置的编程模型涉及到三个核心对象,分别通过三个 ...

  9. Android组件体系之Activity启动模式解析

    本文主要分析Activity的启动模式及使用场景. 一.Activity启动模式浅析 1.standard 标准模式,系统默认的启动模式.在启动Activity时,系统总是创建一个新的Activity ...

  10. 活久见: maven pom 竟然都会崩溃!

    问题是: 我的应用的pom 并没有任何报错,但是代码报错,而且编译不通过. 如下,我本地项目,从 spring-cloud-alibaba-dependencies 0.2.1.RELEASE 升级到 ...