python网页内容爬取----入门

爬取菜鸟教程python-100例的每个例题文本

工具准备:
IDE:Pycharm
库:requests、bs4

知识储备

find()只返回第一个匹配到的对象,一般是第一个匹配到的对象
find_all()返回所有匹配的对象

库的导入:

import  requests
from bs4 import BeautifulSoup

获取网页内容

1.获取url
(1)python-100例的url
(2)练习的url

网页的url:https://www.runoob.com/python/python-100-examples.html

url='https://www.runoob.com/python/python-100-examples.html'
#伪装自己,让机器认为每次都是认为是浏览器去访问
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
}
#1.发送请求
r=requests.get(url,headers=headers).content.decode('utf-8')
print(r)

注意这里的headers,添加headers我的理解是可以让机器认为是浏览器去访问的网址

header的获取方法:
1.打开网页,右击检查
2.点击network,会发现里面什么都没有

3.刷新网页 则会出现下图所示,将user-agent复制粘贴到代码中即可 网页的内容已经获取,可以通过print打印网页内容

解析文档

#2.解析html文档
#创建BeautifulSoup对象用来解析文档
soup=BeautifulSoup(r,'lxml')
#可以打印soup的类型查看
# print(type(soup))

获取例题的url;

通过网页检查,使用检查页面左上角的符号定位你要获取的内容

可以发现,每个例题的链接是在标签id为content的ul的标签下的所有a标签 这句话有点绕口,可以倒着解释,a标签是在ul下,而ul又是在

代码如下:

#3.查找每个练习的a链接的herf属性并获取链接地址
re_a=soup.find(id='content').ul.find_all('a')
#返回的是100个a标签的列表   包括链接和文本

将所有的例题链接放进一个列表中

#将所有的链接地址存放在一个列表中
list=[]
for i in re_a:
    list.append(i.attrs['href'])
   #attrs['href']只获取标签a中的链接内容

attrs[‘标签名’]是获取属性值

请求每个链接地址的联系,获得页面内容

for x in list:
	#创建一个字典用来保存获取的内容
    dic={}
    ar=requests.get('https://www.runoob.com'+x,headers=headers).content.decode('utf-8')
    #解析文档
    soup2=BeautifulSoup(ar,'lxml')
    #查找练习内容
    #1.查找标题
    dic['title']=soup2.find(id='content').h1.text
    # print(title)
    #2.查找题目内容
    dic['tm']=soup2.find(id='content').find_all('p')[1].text
    #print(tm)
    #3.程序分析
    dic['analysis']=soup2.find(id='content').find_all('p')[2].text
    #print(analysis)
    #4.源代码
    #class在 python 中是关键保留字,不能再将这些字作为变量名或过程名使用,所以class_ 应运而生
    #try except 异常模块处理
    try:
        dic['code']=soup2.find(class_='hl-main').text
    except:
        dic['code'] = soup2.find('pre').text

最后用到了python的异常处理机制try…except…

try except 语句的执行流程如下:
(1)首先执行 try 中的代码块,如果执行过程中出现异常,系统会自动生成一个异常类型,
并将该异常提交给 Python 解释器,此过程称为捕获异常。
(2)当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,
如果找到合适的 except 块,则把该异常对象交给该 except 块处理,
这个过程被称为处理异常。如果 Python 解释器找不到处理异常的 except 块,
则程序运行终止,Python 解释器也将退出。

原因:不是每个例题的代码都是在class=‘h1-main’中,如下图所示
这里简写成’pre’
在这里插入图片描述
保存文件

    with open('python-100.csv','a+',encoding='utf-8') as file:
        file.write(dic['title']+'\n')
        file.write(dic['tm']+'\n')
        file.write(dic['analysis']+'\n')
        file.write(dic['code']+'\n')
        file.write('*'*50+'\n')

检查文件
已经保存在文件名为python-100中
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值