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动态监控日志内容的示例
Feb 16 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
python递归函数绘制分形树的方法
Jun 22 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
python实现中文文本分句的例子
Jul 15 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
python自动化unittest yaml使用过程解析
Feb 03 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
django教程如何自学
Jul 31 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
python 模拟登陆github的示例
Dec 04 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
Jquery attr("checked") 返回checked或undefined 获取选中失效
2013/10/10 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
Django中使用Celery的方法示例
2018/11/29 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
Pandas中resample方法详解
2019/07/02 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
护理专科自荐书范文
2014/02/18 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
天网工程实施方案
2014/03/26 职场文书
代办出身证明书
2014/10/21 职场文书
实习证明模板
2015/06/16 职场文书
教你一步步实现一个简易promise
2021/11/02 Javascript