Scrapy が大学のニュースレポートの例をキャプチャ
四川大学行政学院の公式 Web サイトからすべてのニュースに関する問い合わせを受信します ()。
実験プロセス
1. クローリング ターゲットを決定します。2. クローリング ルールを作成します。
3.
4. クロールされたデータを取得します

WeChat Screenshot_20170515223045.png

Paste_Image .png
特定のニュース列を見ましたが、これは明らかにクロールのニーズを満たしていません。現在のニュース Web ページはクロールのみ可能です。ニュースの時刻、タイトル、URL はクロールできませんが、ニュースの詳細ページに移動して、ニュースの特定のコンテンツをキャプチャする必要があります

これは私たちにとって明らかに難しいことではありません。

それでは、考えを整理した後、明らかなキャプチャのルールを考えることができます:
「ニュースセクション」の下にあるすべてのニュースリンクをキャッチし、ニュースの詳細リンクを入力してすべてのニュースを取得します。
3. 「書き込み/デバッグ」クローリングルール
クローラーでは、以下を実装します。機能ポイント:
1. ページのニュース列の下にあるすべてのニュース リンクをクロールします
3.
対応するナレッジ ポイントは次のとおりです。
1. クロールする。
2. クロールされたデータをすべてクロールします。ページをループしますのソース コードを分析します。ニュース列で、キャプチャされたデータの構造が3.1 1 ページのニュース列の下にあるすべてのニュース リンクを表示します
さっそく始めましょう

Paste_Image.png
であることがわかりました。その後、クローラーのセレクターを (li:newsinfo_box_cf) に配置し、for ループを実行してクロールするだけです。

import scrapyclass News2Spider(scrapy.Spider): name = "news_info_2" start_urls = ["http://ggglxy.scu.edu.cn/index.php?c=special&sid=1&page=1", ]def parse(self, response):for href in response.xpath("//div[@class='newsinfo_box cf']"): url = response.urljoin(href.xpath("div[@class='news_c fr']/h3/a/@href").extract_first())
テストして合格してください!
3.2 クロールされたニュースリンクからニュースの詳細を入力し、必要なデータ (主にニュースコンテンツ) をクロールします

コードを記述して
#进入新闻详情页的抓取方法 def parse_dir_contents(self, response):item = GgglxyItem()item['date'] = response.xpath("//div[@class='detail_zy_title']/p/text()").extract_first()item['href'] = responseitem['title'] = response.xpath("//div[@class='detail_zy_title']/h1/text()").extract_first() data = response.xpath("//div[@class='detail_zy_c pb30 mb30']")item['content'] = data[0].xpath('string(.)').extract()[0] yield item
import scrapyfrom ggglxy.items import GgglxyItemclass News2Spider(scrapy.Spider): name = "news_info_2" start_urls = ["http://ggglxy.scu.edu.cn/index.php?c=special&sid=1&page=1", ]def parse(self, response):for href in response.xpath("//div[@class='newsinfo_box cf']"): url = response.urljoin(href.xpath("div[@class='news_c fr']/h3/a/@href").extract_first())#调用新闻抓取方法yield scrapy.Request(url, callback=self.parse_dir_contents)#进入新闻详情页的抓取方法 def parse_dir_contents(self, response): item = GgglxyItem() item['date'] = response.xpath("//div[@class='detail_zy_title']/p/text()").extract_first() item['href'] = response item['title'] = response.xpath("//div[@class='detail_zy_title']/h1/text()").extract_first() data = response.xpath("//div[@class='detail_zy_c pb30 mb30']") item['content'] = data[0].xpath('string(.)').extract()[0]yield item
テストに合格しました。 !
Paste_Image.pngこの時点で、ループを追加します:
NEXT_PAGE_NUM = 1 NEXT_PAGE_NUM = NEXT_PAGE_NUM + 1if NEXT_PAGE_NUM<11:next_url = 'http://ggglxy.scu.edu.cn/index.php?c=special&sid=1&page=%s' % NEXT_PAGE_NUM yield scrapy.Request(next_url, callback=self.parse)

import scrapyfrom ggglxy.items import GgglxyItem NEXT_PAGE_NUM = 1class News2Spider(scrapy.Spider): name = "news_info_2" start_urls = ["http://ggglxy.scu.edu.cn/index.php?c=special&sid=1&page=1", ]def parse(self, response):for href in response.xpath("//div[@class='newsinfo_box cf']"): URL = response.urljoin(href.xpath("div[@class='news_c fr']/h3/a/@href").extract_first())yield scrapy.Request(URL, callback=self.parse_dir_contents)global NEXT_PAGE_NUM NEXT_PAGE_NUM = NEXT_PAGE_NUM + 1if NEXT_PAGE_NUM<11: next_url = 'http://ggglxy.scu.edu.cn/index.php?c=special&sid=1&page=%s' % NEXT_PAGE_NUMyield scrapy.Request(next_url, callback=self.parse) def parse_dir_contents(self, response): item = GgglxyItem() item['date'] = response.xpath("//div[@class='detail_zy_title']/p/text()").extract_first() item['href'] = response item['title'] = response.xpath("//div[@class='detail_zy_title']/h1/text()").extract_first() data = response.xpath("//div[@class='detail_zy_c pb30 mb30']") item['content'] = data[0].xpath('string(.)').extract()[0] yield item
Test:
抓到的数量为191,但是我们看官网发现有193条新闻,少了两条.
为啥呢?我们注意到log的error有两条:
定位问题:原来发现,学院的新闻栏目还有两条隐藏的二级栏目:
比如:

对应的URL为

URL都长的不一样,难怪抓不到了!
那么我们还得为这两条二级栏目的URL设定专门的规则,只需要加入判断是否为二级栏目:
if URL.find('type') != -1: yield scrapy.Request(URL, callback=self.parse)
组装原函数:
import scrapy from ggglxy.items import GgglxyItem NEXT_PAGE_NUM = 1class News2Spider(scrapy.Spider): name = "news_info_2" start_urls = ["http://ggglxy.scu.edu.cn/index.php?c=special&sid=1&page=1", ]def parse(self, response):for href in response.xpath("//div[@class='newsinfo_box cf']"): URL = response.urljoin(href.xpath("div[@class='news_c fr']/h3/a/@href").extract_first())if URL.find('type') != -1:yield scrapy.Request(URL, callback=self.parse)yield scrapy.Request(URL, callback=self.parse_dir_contents) global NEXT_PAGE_NUM NEXT_PAGE_NUM = NEXT_PAGE_NUM + 1if NEXT_PAGE_NUM<11: next_url = 'http://ggglxy.scu.edu.cn/index.php?c=special&sid=1&page=%s' % NEXT_PAGE_NUMyield scrapy.Request(next_url, callback=self.parse) def parse_dir_contents(self, response): item = GgglxyItem() item['date'] = response.xpath("//div[@class='detail_zy_title']/p/text()").extract_first() item['href'] = response item['title'] = response.xpath("//div[@class='detail_zy_title']/h1/text()").extract_first() data = response.xpath("//div[@class='detail_zy_c pb30 mb30']") item['content'] = data[0].xpath('string(.)').extract()[0] yield item
测试:

我们发现,抓取的数据由以前的193条增加到了238条,log里面也没有error了,说明我们的抓取规则OK!
4.获得抓取数据
<code class="haxe"> scrapy crawl <span class="hljs-keyword">new<span class="hljs-type">s_info_2 -o <span class="hljs-number">0016.json</span></span></span></code><br/><br/>
以上がScrapy が大学のニュースレポートの例をキャプチャの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Scrapy は記事のクローリングと WeChat パブリックアカウントの分析を実装します 近年人気のソーシャルメディアアプリケーションである WeChat で運用されているパブリックアカウントも非常に重要な役割を果たしています。誰もが知っているように、WeChat の公開アカウントは記事、グラフィック メッセージ、その他の情報を公開できるため、情報と知識の海です。この情報は、メディア報道、学術研究など、さまざまな分野で広く使用できます。そこで、この記事では、Scrapy フレームワークを使用して WeChat パブリック アカウントの記事をクロールおよび分析する方法を紹介します。 Scr

Scrapy は、Web サイトからデータを迅速かつ効率的に取得できるオープンソースの Python クローラー フレームワークです。ただし、多くの Web サイトでは Ajax 非同期読み込みテクノロジーが使用されているため、Scrapy がデータを直接取得することはできません。この記事では、Ajax 非同期読み込みをベースとした Scrapy の実装方法を紹介します。 1. Ajax 非同期ロードの原則 Ajax 非同期ロード: 従来のページロード方法では、ブラウザがサーバーにリクエストを送信した後、サーバーが応答を返してページ全体をロードするまで待ってから、次のステップに進む必要があります。

Scrapy は、インターネット上の関連情報を迅速かつ簡単に取得できる Python ベースのクローラー フレームワークです。この記事では、Scrapy のケースを使用して、LinkedIn で企業情報をクロールする方法を詳細に分析します。ターゲット URL を決定する まず、ターゲットが LinkedIn 上の企業情報であることを明確にする必要があります。したがって、LinkedIn の企業情報ページの URL を見つける必要があります。 LinkedIn Web サイトを開き、検索ボックスに会社名を入力し、

Scrapy は、インターネットから大量のデータを取得するために使用できる強力な Python クローラー フレームワークです。ただし、Scrapy を開発する場合、重複した URL をクロールするという問題が頻繁に発生します。これは、多くの時間とリソースを無駄にし、効率に影響を与えます。この記事では、重複 URL のクロールを減らし、Scrapy クローラーの効率を向上させるための Scrapy 最適化テクニックをいくつか紹介します。 1. Scrapy クローラーの start_urls 属性と allowed_domains 属性を使用して、

Windows 10 オペレーティング システムをこよなく愛するユーザーは、デスクトップの右下隅に表示される情報と興味に関する推奨機能に気づいたはずです。この機能は、あらゆる種類の興味深いニュース情報を適切なタイミングで表示しますが、ユーザーによっては面倒に感じてオフにすることもあれば、有効にしておくというユーザーもいます。現時点では、次の詳細な手順を使用して、いつでもどこでもこれらの設定を簡単に調整できます。 win10 でニュースや興味のあるものを開く方法 1. まず win+R を押し、次に「winver」と入力して Enter を押すと、コンピューターのバージョン情報を確認して、21h1 バージョンであるかどうかを確認できます。 2. タスクバーを右クリックし、「情報と興味」を選択します。 3. ここで

Instagram は、今日最も人気のあるソーシャル メディアの 1 つであり、数億人のアクティブ ユーザーがいます。ユーザーは何十億もの写真やビデオをアップロードしており、このデータは多くの企業や個人にとって非常に貴重です。したがって、多くの場合、Instagramのデータを自動的にスクレイピングするプログラムを使用する必要があります。この記事では、PHPを使ってInstagramのデータを取り込む方法と実装例を紹介します。 PHP の cURL 拡張機能をインストールする cURL は、さまざまな用途で使用されるツールです。

Scrapy クローラーでの Selenium と PhantomJS の使用 Scrapy は、Python 上の優れた Web クローラー フレームワークであり、さまざまな分野のデータ収集と処理に広く使用されています。クローラーの実装では、特定の Web サイトが提供するコンテンツを取得するためにブラウザーの操作をシミュレートする必要がある場合があり、この場合には Selenium と PhantomJS が必要になります。 Selenium はブラウザ上で人間の操作をシミュレートし、Web アプリケーションのテストを自動化します。

Scrapy は、インターネット上のデータを迅速かつ柔軟に取得するのに役立つ強力な Python クローラー フレームワークです。実際のクローリングのプロセスでは、HTML、XML、JSON などのさまざまなデータ形式に遭遇することがよくあります。この記事では、Scrapyを使用してこれら3つのデータ形式をそれぞれクロールする方法を紹介します。 1. HTML データをクロールして Scrapy プロジェクトを作成する まず、Scrapy プロジェクトを作成する必要があります。コマンドラインを開き、次のコマンドを入力します:scrapys
