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。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容