Python网络爬虫简单教程——第三部

python 爬虫 爬取笑话、热评、图片

感谢,如需转载请注明文章出处:https://blog.csdn.net/weixin_44609873/article/details/103691024


Python 网络爬虫简单教程——第一部

Python 网络爬虫简单教程——第二部

Python 网络爬虫简单教程——第三部


19年 12月 24日
又是闲暇好时光,坐下来喝喝茶,码码代码,程序员的世界就是这么奢华且枯燥!

上两部分,我们一起探讨了 爬虫的定义 与 实际意义,以及请求网页得到源码,再爬取百度链接等。

今天呢 我们一起来探讨一下

  • —把喜欢的笑话段子爬到本地

  • —爬取电影《小丑》豆瓣热评

  • —用爬虫爬取想要的图片并保存到本地

(=爬取视频= 后续我会单独写一个博客,因为爬取视频可能会牵扯到视频网站维权问题,会侵删,如果爬视频博客没了,欢迎私聊找我。)


1、利用爬虫把喜欢的笑话段子爬到本地

我们先来看看爬取内容:

01.小保姆嗓门特别大,主人叮嘱,今晚来的都是有身份的人,说话务必小声一点。吃完饭,主人客人玩牌,小保姆收拾完想早点休息,于是凑近男主人耳边轻声道:“那我先睡了哈。”
  
02.有妞不泡,大逆不道。见妞就泡,替天行道。胸脯高高,越摸越骚。小腰细细,身怀绝技。身材小巧,没完没了。屁股翘翘,要完还要。
  
03.小夫妻一夜欢欲。事毕,老公去洗手间认真的清洗擦拭,妻问干嘛那么久?老公说:狙击枪用完就要保养,我的兄弟叫顺溜…
  
狙击枪用完要保养 还顺溜 、、、 可以说这个网站的 “笑话” 不可谓不淫荡。

哪个网站呢?

笑话集 http://www.jokeji.cn/

Python网络爬虫简单教程——第三部_第1张图片
我们随便找一个笑话进去爬取比如 十个爆笑段子,不笑不要钱
网站:http://www.jokeji.cn/jokehtml/bxnn/20090926220449.htm
这个也就是我们需要爬取网站 url ,接下来我们点进去,按 f12 进入开发者模式看看能否发现宝藏
Python网络爬虫简单教程——第三部_第2张图片
果然,这样我们发现其实需要爬取的内容全部都在 里面,如下图
在这里插入图片描述
因此我们就可以写 东西了
pycharm 中新建 PcJoke.py
Python网络爬虫简单教程——第三部_第3张图片
码入代码

"""

爬取笑话网笑话
爱娶媳妇的苗同学

"""
# 爬取笑话集笑话
import requests
from bs4 import BeautifulSoup

# 获取html文档
def get_html(url):
    """get the content of the url"""
    response = requests.get(url)
    response.encoding = 'gbk'  #中文编码
    return response.text

# 获取笑话并返回
def get_certain_joke(html):
    """get the joke of the html"""
    soup = BeautifulSoup(html, 'lxml')  
    joke_content = soup.select('#text110')[0].get_text()  #get_text() 可以获取 span 标签内文本
    return joke_content


url_joke = "http://www.jokeji.cn/jokehtml/bxnn/20090926220449.htm"
html = get_html(url_joke)
joke_content = get_certain_joke(html)
print(joke_content)

代码解析:首先还是请求网页获得网页源代码,我们加了一句response.encoding = 'gbk'’gbk‘ 支持中文编码,其实就是把源代码中文字显示出来,不然文字编译会乱码。
然后用 soup = BeautifulSoup(html, 'lxml') 解析源码并获取所需笑话内容
其中的 get_text() 是获取span 标签内文本的,也就是笑话内容。

运行结果
Python网络爬虫简单教程——第三部_第4张图片

如果没有汉字编码 response.encoding = 'gbk'
Python网络爬虫简单教程——第三部_第5张图片

获取了内容 ,我们就要开始存储了,便于以后我们 浏览 运送等

储存代码

#存储笑话文件
def save(text):
    with open('D:\新建文件夹\Joke.txt','w') as f:
        f.write(text)
        print("存储已完成!")

这样就把文件存储到 D:\新建文件夹\Joke.txt 中了

最后爬取笑话集,完整代码

"""

爬取笑话网笑话
爱娶媳妇的苗同学

"""
# 爬取笑话集笑话
import requests
from bs4 import BeautifulSoup

# 获取html文档
def get_html(url):
    """get the content of the url"""
    response = requests.get(url)
    response.encoding = 'gbk'  #中文编码
    return response.text

# 获取笑话
def get_certain_joke(html):
    """get the joke of the html"""
    soup = BeautifulSoup(html, 'lxml')
    joke_content = soup.select('#text110')[0].get_text()
    text = " "  #新建文本用于存放笑话
    text += text + joke_content
    return text

#存储笑话文件
def save(text):
    with open('D:\新建文件夹\Joke.txt','w') as f:
        f.write(text)
        print("存储已完成!")

url_joke = "http://www.jokeji.cn/jokehtml/bxnn/20090926220449.htm"
html = get_html(url_joke)
joke_content = get_certain_joke(html)
save(joke_content)

完成结果
Python网络爬虫简单教程——第三部_第6张图片
Python网络爬虫简单教程——第三部_第7张图片


2、爬取电影《小丑》豆瓣热评

前段时间,小丑是沸沸扬扬,出于好奇,晚上爬了这个视频来看,视频打开了,好朋友请吃饭,出门,回来小丑已经放完,我也就理所应当的看完了()

直接进 小丑热评:https://movie.douban.com/subject/27119724/comments
这就是我们需要爬取的东西,点进去 狠狠按 f12
Python网络爬虫简单教程——第三部_第8张图片

一目了然了吧,我们需要的 影评人 和 影评内容 都在,没得跑,分析过后,我们便可以着手了干一把了

Pa_Douban.py
Python网络爬虫简单教程——第三部_第9张图片

import requests
from  bs4 import BeautifulSoup

html = requests.get('https://movie.douban.com/subject/27119724/comments')
print(html)

运行这两行代码,大家认为网页请求正确吗?
——应该正确是吧,可是
Python网络爬虫简单教程——第三部_第10张图片
而非 ,为什么呢?

——之前我在爬虫第二部分提到过,有些网站不欢迎不明东西比如爬虫来访问自己,会拒绝,这时就需要我们引入:User-Agen , 这个东西在网站开发者下Network——Headers 中可以找到。

小丑热评https://movie.douban.com/subject/27119724/comments

f12
Python网络爬虫简单教程——第三部_第11张图片
这里便是你的 User-Agen ,比如我的是:

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

其实就在告诉网站 我是什么来访问你? 电脑 还是 手机? 型号、浏览器等,
我们把自己的 User-Agen 放上去 ,请求网站便以为我们是浏览器的正常访问,就会放我们通过啦,从而达到隐藏我们 python 爬虫的身份。

import requests
from  bs4 import BeautifulSoup

headers = {
    "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
 }
html = requests.get('https://movie.douban.com/subject/27119724/comments',headers = headers)
print(html)

Python网络爬虫简单教程——第三部_第12张图片
访问正常我们便可以着手接下来的动作了
我们发现 热评内容信息在类 short 中、影评人信息在类 avatar 里标签 a 中 ,于是我们可以这样

"""
爱娶媳妇的苗同学
爬取小丑热评
"""
# import urllib2
import requests
from  bs4 import BeautifulSoup

headers = {
    "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
 }
html = requests.get('https://movie.douban.com/subject/27119724/comments',headers = headers)
print(html)
html_text = html.text

soup = BeautifulSoup(html_text,'lxml')
hot_content_list = soup.select('.short')  #热评内容信息在类 short 中
hot_title_list = soup.select('.avatar a')  #影评人信息在类 avatar 里标签 a 中
title_list = []  #影评人信息数组
content_list = []  #热评内容信息数组

# 得到影评人内容
for access in hot_title_list:
    title = access.get('title')
    title_list.append(title)

# 得到热评价内容
for content in hot_content_list:
    final_content = content.get_text()
    content_list.append(final_content)

# 存储爬取内容
text = ''
for i in range(0,len(title_list)):
    text += '\n影评人: ' + title_list[i] + '\n评价: ' +content_list[i]
with open('D:/新建文件夹/Xiaoc.txt','w') as f:
        f.write(text)
        print("储存已完成")


运行结果
Python网络爬虫简单教程——第三部_第13张图片
Python网络爬虫简单教程——第三部_第14张图片


3、爬虫爬取想要的图片并保存到本地

注意:图片和视频都是以二进制在计算机上存储的 ,因为计算机六亲不认,只识 0 1

1、目标url :健身瑜伽图片:https://www.pexels.com/zh-tw/search/%E5%81%A5%E8%BA%AB%E7%91%9C%E4%BC%BD/

2、同样我们 f12 找到源代码
Python网络爬虫简单教程——第三部_第15张图片
我们发现 img 标签下 srcset 里面这个特别像图片链接,我们可以大胆假设是,并且复制到浏览器去验证下
Python网络爬虫简单教程——第三部_第16张图片
正好就是,这样 我们的目标就确认下来了,接下来就是写相应代码啦(温馨提示:不要被网页内容所干扰,认真搞代码

"""
爱娶媳妇的苗同学
爬虫爬取 pexels 上图片

"""

import requests
from bs4 import BeautifulSoup

html = requests.get('https://www.pexels.com/zh-tw/search/%E5%81%A5%E8%BA%AB%E7%91%9C%E4%BC%BD/')
# 将获取的图片地址依次放入img_url中
img_url = []
soup = BeautifulSoup(html.text, 'lxml')
#获取图url并且存放img_url数组
for img in soup.select('.photo-item__img'):
    # srcset 是 img标签中存在的属性
    final_img_path = img.get('srcset')
    img_url.append(final_img_path)
    print(img_url)  #输出 count 数组
    print("总共有 %d 张"%len(img_url))  #数组元素大小等于图片个数

网页解析:

从这我们可以看出 图片是放在类 photo-item__img 中的
于是我们先用 soup.select('.photo-item__img')
再通过 get('srcset') 来锁定图片 url 位置
最后放入 img_url 数组里,以便后续挨个遍历请求图片

运行结果:
Python网络爬虫简单教程——第三部_第17张图片
成功获得图片 url 之后动动手指再加个保存:
完成代码:

"""
爱娶媳妇的苗同学
爬虫爬取 pexels 上图片

"""

import requests
from bs4 import BeautifulSoup

html = requests.get('https://www.pexels.com/zh-tw/search/%E5%81%A5%E8%BA%AB%E7%91%9C%E4%BC%BD/')
# 将获取的图片地址依次放入img_url中
img_url = []
soup = BeautifulSoup(html.text, 'lxml')
#获取图url并且存放img_url数组
for img in soup.select('.photo-item__img'):
    # srcset 是 img标签中存在的属性
    img_path = img.get('srcset')
    img_url.append(img_path)
    print(img_url)  #输出 count 数组
    print("总共有 %d 张"%len(img_url))  #数组元素大小等于图片个数

# 用enumerate依次取出count中的图片地址 放入v中
for i, v in enumerate(img_url):
    # 将获取的 url(v) 放入request中请求
    image = requests.get(v)
    # 存取图片过程中,出现不能存储 int 类型,故而,我们对他进行类型转换 str() wb:二进制进行读写。
    with open('D:\爬虫图片文件\img' + str(i) + '.jpg', 'wb') as file:
        # content:图片转换成二进制,进行保存。
        file.write(image.content)
    print("已完成第","张",sep=str(i))

with open('D:\爬虫图片文件\img' + str(i) + '.jpg', 'wb') as file:
因为图片是二进制在计算机中储存的所以这里有 wb 方式,即二进制读写

运行结果
Python网络爬虫简单教程——第三部_第18张图片
Python网络爬虫简单教程——第三部_第19张图片

夜深了脖子却疼了,晚安!

谢谢观看!
2019.12.25

你可能感兴趣的:(Python,Web前端)