Python爬取网页信息的示例


Posted in Python onSeptember 24, 2020

Python爬取网页信息的步骤

以爬取英文名字网站(https://nameberry.com/)中每个名字的评论内容,包括英文名,用户名,评论的时间和评论的内容为例。

1、确认网址

在浏览器中输入初始网址,逐层查找链接,直到找到需要获取的内容。

在打开的界面中,点击鼠标右键,在弹出的对话框中,选择“检查”,则在界面会显示该网页的源代码,在具体内容处点击查找,可以定位到需要查找的内容的源码。

注意:代码显示的方式与浏览器有关,有些浏览器不支持显示源代码功能(360浏览器,谷歌浏览器,火狐浏览器等是支持显示源代码功能)

步骤图:

1)首页,获取A~Z的页面链接

Python爬取网页信息的示例

Python爬取网页信息的示例

2)名字链接页,获取每个字母中的名字链接(存在翻页情况)

Python爬取网页信息的示例

3)名字内容页,获取每个名字的评论信息

Python爬取网页信息的示例

2、编写测试代码

1)获取A~Z链接,在爬取网页信息时,为了减少网页的响应时间,可以根据已知的信息,自动生成对应的链接,这里采取自动生成A~Z之间的连接,以pandas的二维数组形式存储

def get_url1():
 urls=[]
 # A,'B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
 a=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
#自动生成A~Z的链接
 for i in a:
  urls.append("https://nameberry.com/search/baby_names_starting_with/%s" %i)
 dp=pd.DataFrame(urls)
 dp.to_csv("A~Z_Link1.csv",mode="a",encoding='utf_8_sig')

#循环用于在每个字母链接下,调用爬取名字链接的页面的函数,即函数嵌套
 for j in urls:
  get_pages_Html(j)
 return urls

2)获取名字链接,根据网页源码分析出包含名字链接的标签,编写代码,名字链接用直接存储的方式存储,方便读取名字链接进行对名字的评论内容的获取

#获取页数
def get_pages_Html(url1):
 req = requests.get(url1)
 soup=BeautifulSoup(req.text)
#异常处理,为解决页面不存在多页的问题,使用re正则表达式获取页面数
 try:
  lastpage = soup.find(class_="last").find("a")['href']
  str1='{}'.format(lastpage)
  b=re.findall('\\d+', str1 )
  for page in b:
   num=page
 except:
  num=1
 get_pages(num,url1)
 return num

def get_pages(n,url):
 pages=[]
 for k in range(1,int(n)+1):
  pages.append("{}?page={}".format(url,k))
 dp=pd.DataFrame(pages)
 dp.to_csv("NUM_pages_1.csv",mode="a",encoding='utf_8_sig')
  #函数调用
 for l in pages:
  parse_HTML2(l)
 return pages


# 名字的链接,根据网页源码的标签,确定名字链接的位置
def parse_HTML2(url2):
 try:
  req = requests.get(url2)
  req.encoding = req.apparent_encoding
  soup = BeautifulSoup(req.text)
 except:
  dp=pd.DataFrame(url2)
  dp.to_csv("Error_pages_1.csv",mode="a",encoding='utf_8_sig')
 name_data_l=[]
 error=[]
 li_list = soup.find_all('li',class_="Listing-name pt-15 pb-15 bdb-gray-light w-100pct flex border-highlight")
 try:
  for li in li_list:
   nameList=li.find('a',class_='flex-1')['href']
   name_data_l.append('https://nameberry.com/'+nameList)
   time.sleep(1)
  cun(name_data_l,'Name_List_1')
 except:
  dp=pd.DataFrame(name_data_l)
  dp.to_csv("Error_Name_List_1.csv",mode="a",encoding='utf_8_sig')
  # cun(url2,'Error_link_Q')
 # dp=pd.DataFrame(name_data_l)
 # dp.to_csv("Name_List.csv",mode="a",encoding='utf_8_sig')
 # for i in name_data_l:
 #  parse_HTML3(i)
 return name_data_l

3)获取名字评论的内容,采用字典形式写入文件

# 名字里的内容
def parse_HTML3(url3):
 count=0
 req = requests.get(url3)
 req.encoding = req.apparent_encoding
 soup = BeautifulSoup(req.text)
 error=[]
 try:
  Name=soup.find('h1',class_='first-header').find("a").get_text().replace(",","").replace("\n","")
 except:
  error.append(url3)
  cun(error,"Error_Link_Comment")
 li_list = soup.find_all('div',class_="comment")
 for li in li_list:
  Title=li.find("h4").get_text().replace(",","").replace("\n","")
  Time=li.find("p",class_='meta').get_text().replace(",","").replace("\n","")
  Comments=li.find("div",class_='comment-text').get_text().replace(",","").replace("\n","")
  dic2={
   "Name":Name,
   "Title":Title,
   "Time":Time,
   "Comments":Comments
  }
  time.sleep(1)
  count=count+1
  save_to_csv(dic2,"Name_data_comment")
  print(count)
 return 1

3、测试代码

1)代码编写完成后,具体的函数调用逻辑,获取链接时,为直接的函数嵌套,获取内容时,为从文件中读取出名字链接,在获取名字的评论内容。避免因为逐层访问,造成访问网页超时,出现异常。

如图:

Python爬取网页信息的示例

2)测试结果

Python爬取网页信息的示例

 4、小结

在爬取网页内容时,要先分析网页源码,再进行编码和调试,遵从爬虫协议(严重者会被封号),在爬取的数据量非常大时,可以设置顺序部分请求(一部分的进行爬取网页内容)。

总之,爬虫有风险,测试需谨慎!!!

以上就是Python爬取网页信息的示例的详细内容,更多关于Python爬取网页信息的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Windows下PyMongo下载及安装教程
Apr 27 Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
Python中垃圾回收和del语句详解
Nov 15 Python
python语言基本语句用法总结
Jun 11 Python
Python装饰器的应用场景代码总结
Apr 10 Python
Python求凸包及多边形面积教程
Apr 12 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 Python
如何用Python搭建gRPC服务
Jun 30 Python
Python实现视频中添加音频工具详解
Dec 06 Python
Python find()、rfind()方法及作用
Dec 24 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 #Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 #Python
python绘制分布折线图的示例
Sep 24 #Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 #Python
python 如何调用 dubbo 接口
Sep 24 #Python
python matplotlib绘制三维图的示例
Sep 24 #Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 #Python
You might like
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
python递归计算N!的方法
2015/05/05 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
Python单元测试简单示例
2018/07/03 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
Python按钮的响应事件详解
2019/03/04 Python
Django 返回json数据的实现示例
2020/03/05 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
英文简历自荐信范文
2013/12/11 职场文书
单位消防安全制度
2014/01/12 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android