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 相关文章推荐
Python实现的百度站长自动URL提交小工具
Jun 27 Python
Python运用于数据分析的简单教程
Mar 27 Python
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
python提取页面内url列表的方法
May 25 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
numpy中索引和切片详解
Dec 15 Python
Numpy之random函数使用学习
Jan 29 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
如何基于python实现归一化处理
Jan 20 Python
利用Python如何实时检测自身内存占用
May 09 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 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
PHP5中MVC结构学习
2006/10/09 PHP
聊天室php&mysql(二)
2006/10/09 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
jQuery中size()方法用法实例
2014/12/27 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
Python获取当前时间的方法
2014/01/14 Python
Python中操作MySQL入门实例
2015/02/08 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
python实现自动发送报警监控邮件
2018/06/21 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Python collections模块的使用方法
2020/10/09 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
实习自我鉴定
2013/12/15 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
小学体育组工作总结
2015/08/13 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
Python基础之元编程知识总结
2021/05/23 Python
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
从原生JavaScript到React深入理解
2022/07/23 Javascript