初入爬虫学习之糗事百科爬虫

查看向百度网址发送请求对应的请求头

百度请求头其中Remote Address记录远程百度服务器的主机地址
返回的数据为response,在浏览器中的Response中可以查看到相应的内容(返回的内容为html+css+javascript)
在这里插入图片描述
返回的网页html+css+javascript+数据部分
浏览器的作用:发送请求,接受相应结果并返回页面,get没有请求体,post才有请求体。
爬虫使用python语言编写一个应用程序:“替代浏览器发请求,接受响应”
关注重要的内容user-agent
User-Agent内容(1)发送请求:

url = 'https://www.baidu.com/'#请求的方式为get,所以对应选择request的get方法
resp = requests.get(url)#resp就是响应结果
print(resp)
#返回的码为200,说明响应结果正常,200表示成功,418表示遇到反爬
print(resp.request.headers)
#返回的头部为一个python-requests表示返回的为一个爬虫

爬虫的返回内容将headers改为具体的User-Agent,从浏览器中查看具体的User-Agent
浏览器对应的User-Agent

import  requests
url = 'https://www.baidu.com/'#请求的方式为get,所以对应选择request的get方法
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
#为什么要写headers?因为是反爬的一种手段,伪装成浏览器
resp = requests.get(url,headers = headers)#resp就是响应结果
print(resp)
#返回的码为200,说明响应结果正常,200表示成功,418表示遇到反爬
print(resp.request.headers)
#返回的头部为一个python-requests表示返回的为一个爬虫
print(resp.text)
#返回服务器给你响应回来的数据

发送信息显示的图片此时如果遇到简单的反爬就爬不到你,它认为你写得程序就是一个正常的人为的访问服务器的工作。
打开糗事百科中的video(视频内容)进行查看
糗事百科其中一个标签对应的mp4信息
糗事百科另外一个模块对应的mp4信息

import   re为导入一个需要正则的模块
import  requests
import  re
url = 'https://www.qiushibaike.com/video/'#请求的方式为get,所以对应选择request的get方法
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
#为什么要写headers?因为是反爬的一种手段,伪装成浏览器
resp = requests.get(url,headers = headers)#resp就是响应结果
#第一个参数为匹配的规则,第二个参数为
info = re.findall(r'<source src="(.*)" type="video/mp4">',resp.text)
#.为任意字符,*为任意个,小括号的意思是只要小括号里面的内容
#此时没有拿到任意东西
print(info)

修改代码之后再次进行爬虫

import  requests
import  re
url = 'https://www.qiushibaike.com/video/'#请求的方式为get,所以对应选择request的get方法
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
#为什么要写headers?因为是反爬的一种手段,伪装成浏览器
resp = requests.get(url,headers = headers)#resp就是响应结果
#第一个参数为匹配的规则,第二个参数为
#info = re.findall(r'<source src="(.*)" type="video/mp4">',resp.text)
#.为任意字符,*为任意个,小括号的意思是只要小括号里面的内容
#此时没有拿到任意东西
info = re.findall(r'<source src="(.*)" type=\'video/mp4\' />',resp.text)
#双引号要使用转移字符\',\'来进行表示,控制台里面显示的type=后面的内容为双引号,/>表示字符串最终结束的部分
print(info)
print(type(info))#显示结果为list,说明提取出来的结果是一个列表

爬取数据的结果爬取出来的数据不能直接进行使用,因为前面少了一个https,每次爬取之后前面加上https之后运行程序
在当前文件夹下建立video文件,然后打开对视频进行下载

import  requests
import  re
url = 'https://www.qiushibaike.com/video/'#请求的方式为get,所以对应选择request的get方法
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
#为什么要写headers?因为是反爬的一种手段,伪装成浏览器
resp = requests.get(url,headers = headers)#resp就是响应结果
info = re.findall(r'<source src="(.*)" type=\'video/mp4\' />',resp.text)
#主要匹配最里面的一个source标签,将关键内容提取出来
lst = []
for  item  in  info:
    lst.append('https:'+item)
#print(lst)
count = 0 #给视频命名
'''现在为止已经获取到页面上所有视频的链接地址,剩下的工作就是下载,一个一个发请求'''
for  item  in  lst:
    #发请求下载视频
    requests.get(item,headers = headers)
    count+=1
    #使用上下文管理器进行下载
    with  open('video/'+str(count)+'.mp4','wb') as file:
        #将网络上获取的数据写入到本地磁盘
        file.write(resp.content)
    #resp.content与resp.text的区别
    #resp.content是视频,是二进制数据,resp.text是文本
print('视频下载成功')

运行完之后,视频就可以下载成功了

如果是对于糗事百科文本的提取,首先需要分析糗事百科上面笑话文本的标签结构
糗事百科上面笑话文本的结构可以看出首先进入一个

<div id="qiushi_tag_123345152" class="article block untagged mb15 typs_long">

的标签之中,然后到了

<div class="content">

的内容之后显示笑话中的具体内容,深入观察之后发现后面的class里面的内容还有可能为
“article block untagged mb15 typs_hot”
所以我们需要将这两个class标签中的内容都包含进去。

import requests
from bs4 import BeautifulSoup
r = requests.get('https://www.qiushibaike.com/text/')
content = r.text
soup = BeautifulSoup(r.text, 'lxml')
divs = soup.find_all(class_ = 'article block untagged mb15 typs_long')+soup.find_all(class_ = 'article block untagged mb15 typs_hot')
#共通点是class里面包含两个部分,所以将两个部分都放置进去
for  div  in  divs:
    #if  div.find_all(class_ = 'thumb'):
    #    continue
    joke = div.span.get_text()
    #将divs中的每个div都取出来,把其中的span标签的文字放进joke中并打印出来
    print(joke)
    print('------')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值