数据分析与可视化(二)小爬虫

本文介绍了如何使用requests库替代urllib进行网页爬取,通过设置User-Agent避免反爬,展示了基本的爬虫流程。接着讲解了BeautifulSoup库的使用,包括如何查找和遍历网页元素,以及如何保存爬取数据。同时提供了简单的爬虫代码示例,涉及了数据的请求、响应、解析和保存。
摘要由CSDN通过智能技术生成

python数据分析与可视化(二)第一篇是python基础 代码比较多 用于学过一定python基础的人练习
链接:https://blog.csdn.net/qq_43636709/article/details/109538588
这一边是简单的爬虫 很基础的

首先爬虫之前也写过一点正则表达式和urllib(自带)这两点,今天主要来说requests这个库爬虫。

先温习一下上面链接的用urllib自带库来爬百度贴吧的剑来吧:
1.引入urllib.request组件
2.爬取百度贴吧的基本步骤 :(1)编写loadPage(surl)方法爬取指定url地址的网页,并返回内容 (2)编写爬虫的方法tiebaSprider(surl,startPage,endPage),传三个参数 (3)编写保存爬取到的html文件的方法writeFilePage(htmltxt,page),传递给loadPage方法返回html文件,并保持存到文件中 (4)编写主方法,从键盘输入要爬取的贴吧名称,起始终止的页数,并用urlencode进行编码和拼接地址

******爬取出来的结果就不上了吧 还会有几页html的文件

import os
import time
import urllib.request
#爬取指定url网页
def loadPage(surl):
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}
    request = urllib.request.Request(surl,headers = header)#伪装成浏览器访问方式
    html = urllib.request.urlopen(request)#打开请求信息所得数据
    htmltxt = html.read()#读取网页数据  转换成字符串类型
    #print(type(htmltxt))
    #print(htmltxt)
    return htmltxt.decode("utf-8")

def tiebaSprider(surl,startPage,endPage):
    print("贴吧地址:",surl)
    print("起始与终止页数:",startPage,endPage)
    #计算爬取的页数
    for page in range(startPage,endPage+1):
        #计算pin记录数
        pin = (page - 1)         
        urlful = surl + "&pin=" + str(pin)#打开网页观察页数变化
        print(urlful)
        print("************第",str(page),"页************")
        htmltxt = loadPage(urlful)
        writeFilePage(htmltxt,page)
        time.sleep(4)#等待4秒继续爬取
        
        
def writeFilePage(htmltxt,page):
    fname = "第"+str(page)+"页.html"#文件名
    f = open(fname,"w",encoding='utf-8')
    f.write(htmltxt)
    f.close()
        
if __name__=='__main__':
    surl = "https://tieba.baidu.com/f?"
    #从键盘输入要访问的贴吧名称
    tname = input("请输入要访问的贴吧名称:")
    #包装为字典
    dic = {"kw":tname}
    #将字典转化为要搜索的字符串
    searchString = urllib.parse.urlencode(dic)
    print("要搜索的贴吧名称转换后的字符串:",searchString)
    #打印要搜索的拼接后的字符串
    fullurl = surl + searchString
    print(fullurl)
    startPage = int(input("请输入起始页数:"))
    endPage = int(input("请输入终止页数:"))
    #调用爬虫方法
    tiebaSprider(fullurl,startPage,endPage)
    loadPage(fullurl)     

requests库抓取数据的四个步骤:[需要自己安装pip requests,可自行百度]

#请求
import requests
url = 'https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=10:0&action='#网址
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'}#请求头,用于伪装成浏览器用户访问

html = requests.get(url=url,headers=headers)#发出一个请求
#响应
print(html.text)#将请求所得数据转换成字符串数据,与urllib库的html.read()作用相同        

解析要用到BeautifulSoup这个库,它的用法大家可以参考大佬博主的这篇博文:https://blog.csdn.net/weixin_43930694/article/details/90142678?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

简:BeautifulSoup介绍:【主要用于对标签元素的内容与属性进行解析】 (1)通过urllib或者requests爬取页面信息 (2)NavigableSring 作用:获取标签内部的文字直译:可遍历的字符串。使用方法:soup.p.string。对象类型:; Tag:标签对象;利用 soup加标签名轻松地获取这些标签的内容。它查找的是在所有内容中的第一个符合要求的标签。这些对象的类型是 Tag对象的两个重要属性:name:输出标签的标签类型名 rttrs:字典形式获取标签属性 BeautifulSoup:文档对象,也就是整个文档的内容,可以当做是一个Tag对象。 comment:Coment对象是一个特殊类型的NavigableString对象。如果标签内部的内容是注释,例如:。那么该NavigableSring对象会转换成Comment对象,并且会把注释符号去掉。

#解析-》基础的简单的该库的方法,详细的参考上面给出的博文或者自行查看
from bs4 import BeautifulSoup
soup = BeautifulSoup(html.text,'html.parser')#soup是个BeautifulSoup对象,参数第二个是python自带的解析库,也可以用第三方库,自行csdn
items = soup.find('ul',class_ = 'nav nav-list').find('ul').find_all('li')	#一层一层往下爬
for item in items:
    kind = item.find('a')
    print('分类:'+kind.text.strip())
    

简单说一下:find(‘标签’,class_=‘属性’)是一个查找方法,里面参数是网页标签名字与对应属性,找第一个并返回标签(tag),find_all(‘标签’,class_=‘属性’)查找所有并返回标签对象,可遍历查看。可以在网页上一层一层往下爬。爬到自己想要的数据。

#保存就可以保存成文件
import os
filename = 'test'
f = open(filename,"w",encoding='utf-8')
data = kind.text.strip()
f.write(data)
f.close()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值