爬虫 -- 简单封装

前言

  • 下方代码中的get_proxies方法,根据自身情况适当调整

代码

# -*- coding: utf-8 -*-
#  @Author  : markadc

import random
import hashlib
from datetime import datetime
from string import ascii_letters

import requests


class BaseSpider:
    def __init__(self, session=False):
        self.worker = requests.Session() if session else requests

    # 获取随机ua
    def get_rand_ua(self) -> str:
        a = random.randint(55, 100)
        c = random.randint(0, 3200)
        d = random.randint(0, 140)
        os_type = [
            '(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(X11; Linux x86_64)',
            '(Macintosh; Intel Mac OS X 10_12_6)'
        ]
        chrome_version = 'Chrome/{}.0.{}.{}'.format(a, c, d)
        ua = ' '.join(
            ['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36',
             '(KHTML, like Gecko)', chrome_version, 'Safari/537.36']
        )
        return ua

    # 获取随机headers
    def get_rand_head(self) -> dict:
        headers = {
            "User-Agent": self.get_rand_ua()
        }
        return headers

    # 获取代理
    def get_proxies(self) -> dict:
        return {}

    # 获取随机name
    def get_rand_name(self, length=9) -> str:
        li = [
            [x for x in ascii_letters],
            [str(x) for x in range(10)]
        ]
        temp = [random.choice(li[random.randint(0, 1)]) for _ in range(length)]
        name = ''.join(temp)
        return name

    # 获取当前时间
    def get_curr_time(self) -> str:
        curr_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        return curr_time

    # 获取md5
    def get_md5(self, s: str) -> str:
        value = hashlib.md5(s.encode()).hexdigest()
        return value

    # 解析函数
    def parse(self, url, timeout=6, retry=2, hope_code=200):
        headers = self.get_rand_head()
        proxies = self.get_proxies()
        for _ in range(retry + 1):
            try:
                resp = self.worker.get(url, headers=headers, proxies=proxies, timeout=timeout)
            except Exception as e:
                print("ERROR  >>  parse  >>  {}".format(e))
            else:
                if resp.status_code == hope_code:
                    return resp
                else:
                    print("WARNING  >>  parse  >>  {}  {}".format(resp.status_code, url))

    # 根据网址生成HTML文件
    def download_html(self, path: str, url: str, encoding=None, tips=True):
        resp = self.parse(url)
        if resp is None:
            return False
        path = path if path.endswith('.html') else '{}.html'.format(path)
        with open(path, "w", encoding=encoding or "UTF8") as f:
            f.write(resp.text)
        if tips:
            print('已生成  >>  {}'.format(path))
        return path

    # 根据图片网址生成图片
    def download_img(self, path: str, url: str, tips=True):
        resp = self.parse(url)
        if resp is None:
            return False
        with open(path, "wb") as f:
            f.write(resp.content)
        if tips:
            print('已生成  >>  {}'.format(path))
        return path

    # 根据内容保存文件
    def save_file(self, path: str, text: str, tips=True):
        with open(path, "w") as f:
            f.write(text)
        if tips:
            print('已生成  >>  {}'.format(path))
        return path

    # 获取爬虫当前IP
    def get_curr_ip(self) -> str:
        url = "https://httpbin.org/ip"
        resp = self.parse(url)
        ip = resp.json()["origin"]
        return ip


if __name__ == '__main__':
    spider = BaseSpider()
    ip = spider.get_curr_ip()
    print(ip)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用Python爬虫爬取图片的步骤: 1. 导入需要的库:requests、os、urllib。 2. 使用requests库发送请求,获取网页的HTML源代码。 3. 使用BeautifulSoup库解析HTML源代码,获取图片的URL地址。 4. 使用os库创建一个本地文件夹,用于存储下载的图片。 5. 使用urllib库下载图片,并保存在本地文件夹中。 6. 将上述步骤封装成函数,可用于批量下载图片。 下面是一个简单的代码示例: ``` import requests import os from bs4 import BeautifulSoup import urllib def download_images(url, folder_path): # 发送请求,获取HTML源代码 response = requests.get(url) html = response.text soup = BeautifulSoup(html, 'html.parser') # 查找所有的图片标签 img_tags = soup.findAll('img') # 创建本地文件夹 os.makedirs(folder_path, exist_ok=True) # 遍历所有图片标签,下载图片并保存到本地文件夹中 for img_tag in img_tags: img_url = img_tag.get('src') if img_url: img_path = os.path.join(folder_path, img_url.split('/')[-1]) urllib.request.urlretrieve(img_url, img_path) # 调用函数,下载图片 download_images('https://www.example.com', 'images') ``` 上述代码中,函数`download_images`接受两个参数:`url`表示要下载图片的网页URL地址,`folder_path`表示要保存下载图片的本地文件夹路径。函数使用requests库发送请求,获取HTML源代码,然后使用BeautifulSoup库解析HTML代码,查找所有的图片标签,遍历所有图片标签,下载图片并保存到本地文件夹中。最后调用`download_images`函数,传入相应的参数即可完成图片下载。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值