Python爬虫简单实现

所需要使用模块

requests官网API:https://requests.readthedocs.io/zh_CN/latest/
bs4API:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

简单的例子

# 倒入模块
import requests
from bs4 import BeautifulSoup
import json
import time


# 简单爬虫
class Reptile:

    # url
    url = "https://docs.python.org/zh-cn/3.9/library/csv.html"
    # header
    headers = {
        # 请求代理,模拟浏览器请求
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"
    }

    # 获取网页内容
    def get_url_data(self, file_name):
        # 发起请求
        r = requests.get(self.url, headers=self.headers)
        # 制定网页文本格式
        b = BeautifulSoup(r.text, "html.parser")
        # 获取指定标签、class的内容
        mooc_classes = b.find_all("a", "reference")
        class_list = []

        # 格式化课程信息
        for i in range(len(mooc_classes)):
            title = mooc_classes[i].text.strip()
            class_list.append("链接名称: {} \n".format(title))

        # 将课程信息写入文本文件中
        with open(file_name, "a+") as f:
            for text in class_list:
                f.write(text)

    # 抓取图片
    def get_images(self):
        try:
            # 开始抓取时间
            print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
            # 抓取站酷图片URL,循环抓取100次,每次抓取20
            url = "https://www.zcool.com.cn/discover.json"
            i = 1
            n = 1
            while i < 100:
                params = {
                    'cate': 33,
                    'subCate': 0,
                    'hasVideo': 0,
                    'city': 0,
                    'college': 0,
                    'recommendLevel': 2,
                    'sort': i,
                    'sa': '1616382241000,p_12879945',
                    'pageNo': 1,
                    'gogoupApiFlag': True,
                    'isFetchGogoUp': False,
                    'limit': 20
                }
                i = i + 1
                # 发起请求
                r = requests.get(url, headers=self.headers, params=params)
                # JSON解码
                data = json.loads(r.text)
                for item in data["data"]["data"]:
                    if item["object"]["cover"] != "":
                        print(item["object"]["cover"], item["object"]["title"], n)
                        n = n + 1
                        res = requests.get(item["object"]["cover"], headers=self.headers)
                        title = item["object"]["title"].replace("/", "_")
                        with open("./images/%s.jpg" % title, 'wb') as f:
                            f.write(res.content)
            # 结束抓取时间
            print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        except Exception as e:
            print("抓取失败。。。。")
            print(e.args)
            print(str(e))
            print(repr(e))
        else:
            print("完成")


反爬虫

1、请求头识别
这是一种最基本的反爬虫方式,网站运营者通过验证爬虫的请求头的 User-agent,accep-enconding 等信息来验证请求的发出宿主是不是真实的用户常用浏览器或者一些特定的请求头信息。
2、动态加载
通过 Ajax,或 者javascript 来动态获取和加载数据,加大爬虫直接获取数据的难度。
3、验证码
这个相信大多数读者非常熟悉了吧,当我们输错多次密码的时候,很多平台都会弹出各种二维码让我们识别,或者抢火车票的时候,会出现各种复杂的验证码,验证码是反爬虫措施中,运用最广,同时也是最有效直接的方式来阻止爬虫的措施之一。
4、限制IP
在识别到某些异常的访问的时候,网站运营者会设置一个黑名单,把一些判定为爬虫的IP进行限制或者封杀。
5、账号限制
有些网站,没有游客模式,只有通过注册后才可以登录看到内容,这个就是典型的使用账号限制网站,一般可以用在网站用户量不多,数据安全要求严格的网站中。

反反爬虫

1、更改 UserAgent
我们可以在请求头中替换我们的请求媒介,让网站误认为是我们是通过移动端的访问,运行下面的代码后,当我们打开 hupu.html,我们会发现返回的是移动端的虎扑的页面而不是网页端的。
2、减少爬取频率,设置间隔时间
比如,我们可以设置一个随机的间隔时间,来模拟用户的行为,减少访问的次数和频率。
我们可以在我们爬虫的程序中,加入如下的代码,让爬虫休息3秒左右,再进行爬取,可以有效地避开网站的对爬虫的检测和识别。
3、运用代理机制
代理就是通过访问第三方的机器,然后通过第三方机器的 IP 进行访问,来隐藏自己的真实IP地址。
4、变换IP进行爬取
可以通过动态的 IP 拨号服务器来变换 IP,也可以通过 Tor 代理服务器来变换 IP。

你可能感兴趣的:(Python爬虫简单实现)