如何利用Python爬虫爬取网页中图片(成功实现自动翻页至最后一页)

1.模块的使用

(1).random模块:

主要是为了产生随机数作为写入jpg的名称(这里其实可以用字典形式表示之后再提取图片主要内容作为不同jpg的名称)。

(2).requests模块:

通过请求获取网页数据。

(3)lxml模块:

主要用来从网页数据中通过Xpath方法查找自己想要的数据(这里etree会报错但是能正常使用不用管)。

2.主要爬虫思路

(1).首先要有一个start_url作为第一次网页数据的获取

(2).通过Xpath方法获取数据中jpg的URL

(3).同时通过Xpath方法获取’下一页‘的URL作为next_url

(4).进入循环

3.代码如下(有很多需要改进的地方,请大佬评论区指点):

import random
import requests
from lxml import etree
class Jpgspirer:
    def __init__(self):
        self.header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
            "cookie": "Hm_lvt_86200d30c9967d7eda64933a74748bac = 1642225685, 1642344194;t = 244406d180636c9c3bf6b1439e8d8351;r = 1418;Hm_lpvt_86200d30c9967d7eda64933a74748bac = 1642344258"
        }

    def res(self,start_url):#获取网页响应数据
        res=requests.post(start_url,headers=self.header)
        return res.content.decode()

    def maincontent(self,content):#获取jpg的url
        html=etree.HTML(content)#将html数据规范化便于查找
        ret=html.xpath('//div[@class=\"egeli_pic_li\"]//img/@src')#查找jpg-URL
        return ret

    def next_url(self,content):#获取下一页URL
        html=etree.HTML(content)#将数据规范化
        ret=html.xpath('//a[@class=\"next_p\"]/@href')#查找next_url
        if len(ret)>0:  #判断next_url是否存在,若不存在返回None值以便结束循环
            return ret[0]
        else:
            return None
    def save(self,jpglist):# 将获取到的每个jpg写入到当前文件夹
        for item in jpglist:
            filename = "{}.jpg"
            fname = filename.format(random.uniform(1, 1000))
            res = requests.get(item, headers=self.header)
            with open(fname,'wb') as file:
                file.write(res.content)
            print('保存成功')

    def run(self,start_url):   #实现主要逻辑
        content=self.res(start_url)
        jpg_list=self.maincontent(content)
        next_url=self.next_url(content)
        self.save(jpg_list)     #start_url数据获取并得到next_url
        while next_url!=None:  #进入循环
            content=self.res(next_url)
            jpg_list.extend(self.maincontent(content))
            next_url=self.next_url(content)
            self.save(jpg_list)

if __name__ == '__main__':
    Spider=Jpgspirer()
    Spider.run(' https://mm.enterdesk.com/')#传入start_url

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现豆瓣图书网页的翻页爬取,可以考虑使用 Python 的 requests 和 BeautifulSoup 库。 首先,我们需要确定翻页的规律,例如每一页的 URL 地址是怎样的。以豆瓣图书的搜索结果页为例,可以发现每一页的 URL 都包含了一个 start 参数,表示该页的起始位置。例如: 第一页https://book.douban.com/subject_search?search_text=python&start=0 第二页:https://book.douban.com/subject_search?search_text=python&start=15 第三页:https://book.douban.com/subject_search?search_text=python&start=30 以此类推,每一页的 start 参数都比前一页多 15。因此,我们可以通过修改 start 参数来实现翻页。 下面是一个简单的 Python 爬虫代码示例,可以用于爬取豆瓣图书搜索结果的前 3 页: ```python import requests from bs4 import BeautifulSoup url_template = 'https://book.douban.com/subject_search?search_text=python&start={}' for i in range(0, 45, 15): url = url_template.format(i) response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 在这里可以对搜索结果进行解析和处理 print('Page:', i/15+1) ``` 在这个示例,我们使用了一个 url_template 字符串来表示搜索结果页的 URL 模板,然后通过循环来依次爬取前三页的搜索结果。在每一页的搜索结果页面,我们可以使用 BeautifulSoup 来解析 HTML 并提取所需的信息。 需要注意的是,豆瓣图书搜索结果的页面是动态加载的,因此如果我们需要爬取更多的搜索结果,可能需要使用 Selenium 等工具来模拟浏览器行为,或者通过分析 API 接口来获取更多数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值