ウェブクローラは、Ajax動的に生成された情報をクロール、爬虫類-Scrapy Baiduのニュースをクロール-Scrapy枠組みを説明します

BaiduのニュースホームニュースRULアドレスをクロール、動的に生成された情報のAjaxをクロール、クロールBaiduのニュースcrapy

どのようにWebサイト、あなたはスクロールバーを転がり、実際にHTMLソースファイルを検索するか、表示情報の後の位置に対応する情報を得ることができない、ブラウザが見ることができるアクセス情報は、その後、これは一般的にAjaxのJSです動的に生成された情報要求

私たちはBaiduのニュースコラム:

1、ウェブサイト分析

まず、真ん中の部分を見つけるために、ページ上のブラウザBaiduのニュース、ニュースや情報を開きます
ウェブクローラは、Ajax動的に生成された情報をクロール、爬虫類-Scrapy Baiduのニュースをクロール-Scrapy枠組みを説明します

そして、このニュースは、ソースコードで、ソースファイルを見ることができるかどうかを確認するためにソースコードを表示すると、この情報はありませんが、このような状況は、情報への爬虫類をクロールされていません

ウェブクローラは、Ajax動的に生成された情報をクロール、爬虫類-Scrapy Baiduのニュースをクロール-Scrapy枠組みを説明します

その後、我々はこの時点で我々は、このJSONデータ情報をキャプチャ後のAjaxによって動的に生成された参照、前のパケットキャプチャキャプチャソフトウェアやブラウザソフトを起動し、キャッチ分析を取得する必要があると述べている、と言うことはありません。それはもちろん、生成後、我々はすべてのソースファイルで見つけることができないとき、HTMLページがロード、である、爬虫類を見つけることができませんでした

あなたがプログラミングの世界ではまだ混乱している場合は、Pythonのバックルqun学ぶために私たちに参加することができます:784758214を、高齢者が学んでいる方法を見て。経験の交換。基本的なWeb開発Pythonスクリプトから、爬虫類、ジャンゴ、データマイニングや他のプロジェクトへのゼロベースのデータを戦うために仕上げています。どんな小さなPythonのパートナーに与えられました!いくつかの学習方法を共有し、細部に注意を払う必要があり、私たちに参加をクリックしてPythonの学習者の集い

ウェブクローラは、Ajax動的に生成された情報をクロール、爬虫類-Scrapy Baiduのニュースをクロール-Scrapy枠組みを説明します

私たちは、私たちは情報の要求を参照して、この時間は、わずか17、我々は必要な情報がそれで完全ではありません明らかに、我々は必要なデータが全て内側にはない見ることがブラウザに出このウェブサイトJSONデータを開始します私たちは、他のパッケージのJSを見て継続する必要があります

ウェブクローラは、Ajax動的に生成された情報をクロール、爬虫類-Scrapy Baiduのニュースをクロール-Scrapy枠組みを説明します

私たちは、ニュースや情報のパッケージを見ることはありませんすべてのJS要求をトリガして、JSパッケージを探すために継続するために、我々はすべて完成したパッケージのJSを見つける必要がありますが、最終的に引っ張って、ブラウザのスクロールバーをキャプチャします

ウェブクローラは、Ajax動的に生成された情報をクロール、爬虫類-Scrapy Baiduのニュースをクロール-Scrapy枠組みを説明します

バッグの中ではなく、我々は、我々はget要求応答の多くを参照して、要求の他のタイプに戻って見てみましょうjsの情報は、私たちが最初のAjaxリクエストのJSONデータが背後に戻っていることを示す、ニュースや情報を必要とするということですAjaxリクエストは、HTML文字列データ型を返します

ウェブクローラは、Ajax動的に生成された情報をクロール、爬虫類-Scrapy Baiduのニュースをクロール-Scrapy枠組みを説明します

アヤックスアヤックスURLと我々はJSONデータの返還を要求します、いくつかの比較を行うと、あなたが特定の法律を見つけることができるかどうかを確認するために使用要求文字列データ型のHTMLウェブサイトから返されました

私たちが見ることができる。この時点で、URLやHTMLの文字列データ型は、WebサイトJSONデータ要求アドレスであり、

要求は問題ありませんので、それと同じでない場合パラメータが渡されないとしかし、データ記述の種類にのみ依存するデータ伝送パラメータの種類を返すのみ処理される要求アドレスに返さ

http://news.baidu.com/widget?id=LocalNews&ajax=json&t=1501348444467   JSON数据的网址

http://news.baidu.com/widget?id=civilnews&t=1501348728134        html类型的字符串数据网址

http://news.baidu.com/widget?id=InternationalNews&t=1501348728196    html类型的字符串数据网址

私たちは、それがJSONデータ型を返すかどうか、文字列データ型URLのURLパラメータに加えてJSONデータをhtmlのことができますか?成功本当に、試してみてください

http://news.baidu.com/widget?id=civilnews&ajax=json        将html类型的字符串数据网址加上JSON数据的网址参数

http://news.baidu.com/widget?id=InternationalNews&ajax=json    将html类型的字符串数据网址加上JSON数据的网址参数

ウェブクローラは、Ajax動的に生成された情報をクロール、爬虫類-Scrapy Baiduのニュースをクロール-Scrapy枠組みを説明します

この時間は、URLが上記の方法、およびJSONデータ変換URLにアクセスするための、その後のサイクルに合わせてJSONデータに変換します、すべてのHTML URLの文字列データ型を見つけることが容易になります、あなたはすべてのニュースを得ることができますのURLアドレス

crapy達成

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request,FormRequest
import re
import json
from adc.items import AdcItem
from scrapy.selector import Selector

class PachSpider(scrapy.Spider):                            #定义爬虫类,必须继承scrapy.Spider
    name = 'pach'                                           #设置爬虫名称
    allowed_domains = ['news.baidu.com']                    #爬取域名
    start_urls = ['http://news.baidu.com/widget?id=civilnews&ajax=json']

    qishiurl = [                    #的到所有页面id
        'InternationalNews',
        'FinanceNews',
        'EnterNews',
        'SportNews',
        'AutoNews',
        'HouseNews',
        'InternetNews',
        'InternetPlusNews',
        'TechNews',
        'EduNews',
        'GameNews',
        'DiscoveryNews',
        'HealthNews',
        'LadyNews',
        'SocialNews',
        'MilitaryNews',
        'PicWall'
    ]

    urllieb = []
    for i in range(0,len(qishiurl)):            #构造出所有idURL
        kaishi_url = 'http://news.baidu.com/widget?id=' + qishiurl[i] + '&ajax=json'
        urllieb.append(kaishi_url)
    # print(urllieb)

    def parse(self, response):                  #选项所有连接
        for j in range(0, len(self.urllieb)):
            a = '正在处理第%s个栏目:url地址是:%s' % (j, self.urllieb[j])
            yield scrapy.Request(url=self.urllieb[j], callback=self.enxt)     #每次循环到的url 添加爬虫

    def enxt(self, response):
        neir = response.body.decode("utf-8")
        pat2 = '"m_url":"(.*?)"'
        url = re.compile(pat2, re.S).findall(neir)      #通过正则获取爬取页面 的URL
        for k in range(0,len(url)):
            zf_url = url[k]
            url_zf = re.sub("\\\/", "/", zf_url)
            pduan = url_zf.find('http://')
            if pduan == 0:
                print(url_zf)                       #输出获取到的所有url
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

おすすめ

転載: blog.51cto.com/14510224/2434872