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 sqlobject(mysql)中文乱码解决方法
Nov 14 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
Feb 13 Python
基于python log取对数详解
Jun 08 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
Python 实现进度条的六种方式
Jan 06 Python
用Python selenium实现淘宝抢单机器人
Jun 18 Python
Python保存并浏览用户的历史记录
Apr 29 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实现读取一个1G的文件大小
2013/08/24 PHP
php页面缓存方法小结
2015/01/10 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
js 内存释放问题
2010/04/25 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
javascript几个易错点记录
2014/11/26 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
python中元类用法实例
2014/10/10 Python
python uuid模块使用实例
2015/04/08 Python
python获取本地计算机名字的方法
2015/04/29 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
python抓取百度首页的方法
2015/05/19 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
python 将md5转为16字节的方法
2018/05/29 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
Python timeit模块的使用实践
2020/01/13 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
如何让python的运行速度得到提升
2020/07/08 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
Linux面试题LINUX系统类
2015/11/25 面试题
大学生村官个人总结
2015/02/15 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
党员心得体会范文2016
2016/01/23 职场文书
意外事故赔偿协议书
2016/03/22 职场文书