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中使用base64模块处理字符编码的教程
Apr 28 Python
Python版微信红包分配算法
May 04 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
Python日志处理模块logging用法解析
May 19 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
Python基于smtplib协议实现发送邮件
Jun 03 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
python中字符串的编码与解码详析
Dec 03 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 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实现mysql数据库备份类
2008/03/20 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python-嵌套列表list的全面解析
2016/06/08 Python
详解Python中类的定义与使用
2017/04/11 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
详解小白之KMP算法及python实现
2019/04/04 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
工商管理本科毕业生求职信范文
2013/10/05 职场文书
师范院校学生自荐信范文
2013/12/27 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
社区党总支书记先进事迹材料
2014/01/24 职场文书
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
初中语文教学反思范文
2016/03/03 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
详解如何用Python实现感知器算法
2021/06/18 Python
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android
MySQL限制查询和数据排序介绍
2022/03/25 MySQL
python中pycryto实现数据加密
2022/04/29 Python