【新手专属】Python写一个爬取静态网站的爬虫第二期--翻页操作(讲解)

"’

前言:

这篇文章是以Python3.8.1为基础的
用的IDE是PyCharm2019.3.3
用的库有BeautifulSoup4 和 requests
没有的可以先用这两行代码在Win+r中输入cmd的界面中下载

pip install beautifulsoup4
pip install requests

"’

转载请注明出处!侵权必究

这期我们来讲一下Python爬虫的翻页操作 基础操作链接:CSDN
先随便找一个网站
我这边找了一个表情图片网站

http://www.17qq.com/bq-jinguanzhang.html

没错还是它,表情包网站

先复习一下上期讲的内容
首先先打开开发者工具,按F5或者是鼠标右键点击检查(还是推荐使用Google浏览器)
【新手专属】Python写一个爬取静态网站的爬虫第二期--翻页操作(讲解)_第1张图片

打开后点击Network界面,并刷新一下
【新手专属】Python写一个爬取静态网站的爬虫第二期--翻页操作(讲解)_第2张图片
找到第一个文件点开Headers
【新手专属】Python写一个爬取静态网站的爬虫第二期--翻页操作(讲解)_第3张图片
这里边我们可以找到本网址的URL(域名),UA(User-Agent用户代理),Status Code(状态码)和Cookies等很多信息
这可以帮助我们更好的爬取网站

我们先找到UA先,将Headers页面拉到最下即可

开始今天新内容

首先我们先翻页看看

第二页Url
在这里插入图片描述
第三页Url
在这里插入图片描述
第四页Url
在这里插入图片描述
发现了规律没有?
它的规律就是:
http://www.17qq.com/bq-jinguanzhang_{n}.html

好,发现了规律之后,话不多说直接上代码

# 引用前言要下载的库,没有下载的小宝宝赶紧下载,在用PyCharm的可以Alt+Enter自动补全
import requests
from bs4 import BeautifulSoup

找到主网址,和要翻页网址,也就是刚才发现的规律

# 用于补全图片链接
main_url = "http://www.17qq.com"
# 每一页图片的Url的规律
url = "http://www.17qq.com/bq-jinguanzhang_{}.html"

用Network查找用户代理码,每个人是不同的,需要自己实践操作一下

# 利用开发者工具查找用户代理
# 这是因人而异的
headers = {
     "User-Agent": "用户代理码"}
# 这是专门为密集恐惧症和强迫症小朋友设计的图片简洁名字对象
count = 1  # 此处可注销

这边需要创造一个列表来存储页码,下一期我们会讲到

# 页码列表
pageNum = []
# 一共有30页,所以我们也要循环30次,由于第一页的规律不符合,因此我们等一下单独做一个 # 第一页就是上一期的
for i in range(2, 30):
    # 将页码加入到一个列表里
    pageNum.append(i)

这边可能对一起没接触过或刚接触的小朋友有些难度
可以去这个网站:https://www.runoob.com/python/att-string-format.html 菜鸟教程看看,这个网站挺好的

for item in pageNum:
    # 将页面数字利用format方法进行填充Url
    page_url = url.format(item)
    # 用requests中的get方法请求,并生成一个response对象
    response = requests.get(url=page_url, headers=headers)
    # 用BeautifulSoup进行网页解析,生成一个soup对象
    soup = BeautifulSoup(response.text, "html.parser")  # 此处必须为response对象的text才能解析
    # 查找img标签
    links = soup.find_all("img")

这是一个容易出错的地方,需要小心,注意看

    # 遍历links对象,得到单一的链接
    for link in links:
        Gif = link.get("src")
        print(Gif)

输出以下
'"
/cache/images/0e26ba73cd3ddc59.jpg
/cache/images/fcc419b4e83f7514.jpg
/cache/images/c05da620fc121b88.jpg
/cache/images/48c58f4953abcc0a.jpg
/cache/images/6b67510cfe75879e.jpg
/cache/images/81e75b95897503b4.jpg
/cache/images/be7ce3d341da1447.jpg

‘’’
发现了吗,这些输出的“链接”是不全的,需要我们用前面的main_url对象做一个字符串的拼接

    # 遍历links对象,得到单一的链接
    for link in links:
        # 由于一些因素,得到的链接不全,要与之前的main_url做一个字符串拼接
        Gif = main_url + link.get("src")    # 必须要做,不可去掉
        print(Gif)

下面的和上一期基本一样,需要在for循环里边,文件夹名字随意,也可以去掉

       # 写入文件方法
        with open("./新建文件夹/{}.gif".format(count), "wb") as f_w:
            Photo = requests.get(url=Gif, headers=headers)  # 重新请求链接
            f_w.write(Photo.content)   # 将请求的链接写入(下载)到一个文件夹内
            count += 1  # 防止图片名称重复

这就是这一期全部内容

下面附上完整源码:

"'
作者:LIAO_SHI_JIA
时间:2020.2.22 23:05发布

转载请注明出处!本文是本博主辛苦撰写的,侵权必究!
"'

import requests
from bs4 import BeautifulSoup

# 用于补全图片链接
main_url = "http://www.17qq.com"
# 每一页图片的Url的规律
url = "http://www.17qq.com/bq-jinguanzhang_{}.html"

# 利用开发者工具查找用户代理
# 这是因人而异的
headers = {
     "User-Agent": "自己的用户代理码"}

count = 1

# 页码列表
pageNum = []
# 一共有30页,所以我们也要循环30次,由于第一页的规律不符合,因此我们等一下单独做一个 # 第一页也就是上一期的那个
for i in range(2, 30):
    # 将页码加入到一个列表里
    pageNum.append(i)

for item in pageNum:
    # 将页面数字利用format方法进行填充Url
    page_url = url.format(item)
    # 用requests中的get方法请求,并生成一个response对象
    response = requests.get(url=page_url, headers=headers)
    # 用BeautifulSoup进行网页解析,生成一个soup对象
    soup = BeautifulSoup(response.text, "html.parser")  # 此处必须为response对象的text才能解析
    # 查找img标签
    links = soup.find_all("img")
    # 遍历links对象,得到单一的链接
    for link in links:
        # 由于一些因素,得到的链接不全,要与之前的main_url做一个字符串拼接
        Gif = main_url + link.get("src")    # 必须要做,不可去掉
        print(Gif)
        with open("./新建文件夹/{}.gif".format(count), "wb") as f_w:
            Photo = requests.get(url=Gif, headers=headers)  # 重新请求链接
            f_w.write(Photo.content)   # 将请求的链接写入(下载)到一个文件夹内
            count += 1  # 防止图片名称重复

运行结果:

本人是Python刚入门不久的萌新

谢谢支持!也请多多支持我下一期!

如果程序跑起来有BUG,请指出来,谢谢大家!


转载请注明出处!侵权必究!

你可能感兴趣的:(爬虫,python)