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利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
Python标准库之itertools库的使用方法
Sep 07 Python
Python绘制3D图形
May 03 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
Oct 21 Python
Python UnboundLocalError和NameError错误根源案例解析
Oct 31 Python
Python Django基础二之URL路由系统
Jul 18 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
python线性插值解析
Jul 05 Python
Python 实现将某一列设置为str类型
Jul 14 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 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判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
js 省地市级联选择
2010/02/07 Javascript
JS date对象的减法处理实现代码
2010/12/28 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
js实现楼层导航功能
2017/02/23 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
微信小程序python用户认证的实现
2019/07/29 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
Python如何进行时间处理
2020/08/06 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
绿色环保演讲稿
2014/05/10 职场文书
霸气队列口号
2014/06/18 职场文书
护士节活动总结
2014/08/29 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
应急管理工作总结2015
2015/05/04 职场文书
党支部评议意见
2015/06/02 职场文书
css3带你实现3D转换效果
2022/02/24 HTML / CSS
openstack云计算keystone组件工作介绍
2022/04/20 Servers