非効率的な拒否!Pythonは公共の投稿やリンクの数爬虫類あなたに教えます

この記事では、最初の再版については、正当な公開番号で作者に連絡してください、公共号「Pythonの知識サークル」に登場します。

序文

手動の仕上げまでは、それは非常に面倒なものであれば記事の公衆数は、我々は唯一のチャプター選択を追加しているため、実際には、すべての記事へのパブリックナビゲーションリンクの数を終え上の記事は、単一のボックスです。

記事の記事の何百もの顔は、そのような選択は、それは雑用です。

PKの兄はPythonerとして、当然のことながら、私たちは記事やその他の情報への見出しやリンクを抽出するためにクローラを使用するように非効率的にすることはできません。

Etherealの

URLは、我々は公共の要求パケットキャプチャによる記事の数を抽出する必要があり、パケットキャプチャは、以前の記事参照書いたPythonの爬虫類APP前の準備に直接より多くの記事の公開マイクロチャンネル番号情報リストのPC側をつかむ、そして、PKの兄シンプル。

チャールズ私は、パケットキャプチャツールに、例えば、フェッチ要求を許可するようにコンピュータをチェックし、通常はデフォルトでチェックします。

他の無関係要求をフィルタリングするために、私たちは私たちの左下に設定するには、クロールのドメインにしたいです。

PC側のマイクロチャネルを開いた後、公衆番号「Pythonの知識サークル」の記事のリストを開き、チャールズが多数の要求にクロールされます、我々は要求を見つける必要があり、返されたJSONの情報は、記事、要約、リンクやその他の情報のタイトルが含まれています以下comm_msg_infoインチ

これらの要求は戻って、私たちは概要で見ることができるリンクURL要求をリンクされています。

そう多くの情報を取得することにより、キャプチャした後、我々は保存されているすべての記事や情報をクロール爬虫類を書くことができます。

初期化関数

記事のいかなる公共履歴リストには、より多くの記事は、我々は初期化関数を作成し、このリンクパラメータの変更を相殺するだけ見つかっロードした後、上にスライドしないプロキシIPを追加し、リクエストヘッダ情報には、リクエストヘッダには、ユーザエージェント、クッキー、リファラー含まれています。

この情報は、キャプチャツールで見ることができます。

リクエストデータ

リクエストのリンクからパケット解析をキャプチャすることにより、我々は必要なものを解決エキスに)ライブラリは、我々は(関数parse_dataを構築します、200のような判断を下すための戻りコードで、その後、200説明が適切な情報を返すかどうか、要求された要求を使用することができます情報を返します。

def request_data(self):
    try:
        response = requests.get(self.base_url.format(self.offset), headers=self.headers, proxies=self.proxy)
        print(self.base_url.format(self.offset))
        if 200 == response.status_code:
           self.parse_data(response.text)
    except Exception as e:
        print(e)
        time.sleep(2)
        pass

抽出データ

通过分析返回的 Json 数据,我们可以看到,我们需要的数据都在 app_msg_ext_info 下面。

我们用 json.loads 解析返回的 Json 信息,把我们需要的列保存在 csv 文件中,有标题、摘要、文章链接三列信息,其他信息也可以自己加。

    def parse_data(self, responseData):
            all_datas = json.loads(responseData)
            if 0 == all_datas['ret'] and all_datas['msg_count']>0:
                summy_datas = all_datas['general_msg_list']
                datas = json.loads(summy_datas)['list']
                a = []
                for data in datas:
                    try:
                        title = data['app_msg_ext_info']['title']
                        title_child = data['app_msg_ext_info']['digest']
                        article_url = data['app_msg_ext_info']['content_url']
                        info = {}
                        info['标题'] = title
                        info['小标题'] = title_child
                        info['文章链接'] = article_url
                        a.append(info)
                    except Exception as e:
                        print(e)
                        continue

                print('正在写入文件')
                with open('Python公众号文章合集1.csv', 'a', newline='', encoding='utf-8') as f:
                    fieldnames = ['标题', '小标题', '文章链接']  # 控制列的顺序
                    writer = csv.DictWriter(f, fieldnames=fieldnames)
                    writer.writeheader()
                    writer.writerows(a)
                    print("写入成功")

                print('----------------------------------------')
                time.sleep(int(format(random.randint(2, 5))))
                self.offset = self.offset+10
                self.request_data()
            else:
                print('抓取数据完毕!')

这样,爬取的结果就会以 csv 格式保存起来。

运行代码时,可能会遇到 SSLError 的报错,最快的解决办法就是 base_url 前面的 https 去掉 s 再运行。

保存markdown格式的链接

经常写文章的人应该都知道,一般写文字都会用 Markdown 的格式来写文章,这样的话,不管放在哪个平台,文章的格式都不会变化。

在 Markdown 格式里,用 [文章标题](文章url链接) 表示,所以我们保存信息时再加一列信息就行,标题和文章链接都获取了,Markdown 格式的 url 也就简单了。

md_url = '[{}]'.format(title) + '({})'.format(article_url)

爬取完成后,效果如下。

我们把 md链接这一列全部粘贴到 Markdown 格式的笔记里就行了,大部分的笔记软件都知道新建 Markdown 格式的文件的。

这样,这些导航文章链接整理起来就是分类的事情了。

你用 Python 解决过生活中的小问题吗?欢迎留言讨论。

おすすめ

転載: www.cnblogs.com/pythoncircle/p/12297215.html