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判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
python中安装模块包版本冲突问题的解决
May 02 Python
python中OrderedDict的使用方法详解
May 05 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
numpy中的ndarray方法和属性详解
May 27 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
如何运行带参数的python脚本
Nov 15 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
python中sys模块是做什么用的
Aug 16 Python
Python中Selenium模块的使用详解
Oct 09 Python
Python __slots__的使用方法
Nov 15 Python
AI:如何训练机器学习的模型
Apr 16 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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
ajax在joomla中的原生态应用代码
2012/07/19 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
Yii学习总结之安装配置
2015/02/22 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
windows下numpy下载与安装图文教程
2019/04/02 Python
python实现简单五子棋游戏
2019/06/18 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
函授大专自我鉴定
2013/11/01 职场文书
给医务人员表扬信
2014/01/12 职场文书
行政管理专业求职信
2014/07/06 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
服装店员工管理制度
2015/08/07 职场文书
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers