[Scrapy 5 MinutesWebサイト] [旅行業界ニュース]北京トラベルネットのScrapy実際の戦闘データキャプチャ

ターゲットウェブサイトの紹介

北京市文化観光局が監督する非営利のウェブサイトあるBeijingTravel Netは、中国で最も信頼できる北京の旅行情報を提供し、包括的な北京旅行ガイド、北京旅行の苦情、旅行の質問と回答、および北京を提供します。 。
ここに画像の説明を挿入

Scrapyを開始する

データ収集の準備

1. 5分でウェブサイトをすばやくクロールするという考えを理解していない人のために、まず[ウェブサイトのScrapy5分]サイトデータ全体の基本的な知識を見てみ
ましょう

2.データのキャプチャ、ビジネス管理、および並べ替えについて理解していません。まず
[Scrapy Five MinutesWebサイト]クローラーターゲットの並べ替えとデータの準備を確認してください。

3. Scrapyテンプレートの大量生産を知らない人は、最初にそれを参照してください(必見)
[Scrapy5分Webサイト]データキャプチャプロジェクトフレームワーク一般テンプレート

データ照合結果

1.スクリーンショットをExcelに保存します
ここに画像の説明を挿入

テンプレートアプリケーション

スパイダーの下の<プロジェクト> .pyファイル

1.スパイダープロジェクトを作成します

scrapy genspider www_visitbeijing_com_cn " "

2.
サイト全体のCSSスタイルを整理するまず、ページのCSSスタイルを見てみましょう。サイト全体には3つのスタイルがあります。2つのAPIのJSON形式と従来の形式。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

3.www_visitbeijing_com_cn.pyのコンテンツを変更します

ここでは、変更が必要な部分を説明し、他の場所はテンプレートを参照しているので、変更は不要です。

  • 範囲とカスタムの説明
    allowed_domains = []
    web_name = "北京旅游网"
  • クロールデータ情報を追加する
    start_menu = [
        # 购物
        [
            {
    
    "channel_name": "购物-购物攻略", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/3lz9bx5k", },
            {
    
    "channel_name": "购物-商家信息", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/19iere7b", },
        ],
        # 美食
        [
            {
    
    "channel_name": "美食-潮流美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/2gmxkd2a", },
            {
    
    "channel_name": "美食-地方美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/n0bvf6k2", },
            {
    
    "channel_name": "美食-老北京美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/rlwk9pq8", },
            {
    
    "channel_name": "美食-美食资讯", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/18xr1f7c", },
            {
    
    "channel_name": "美食-异域美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/lhyv22zr", },
        ],
        # 视频
        [
            {
    
    "channel_name": "视频-北京故事", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/lYIcryRt", },
            {
    
    "channel_name": "视频-京郊游玩", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/8UuPRmMl", },
            {
    
    "channel_name": "视频-特色美食", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/Hszvxnoz", },
            {
    
    "channel_name": "视频-游记攻略", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/Jx96mrZo", },
            {
    
    "channel_name": "视频-展演视频", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/m12rdtUw", },
        ],
        # 文化
        [
            {
    
    "channel_name": "文化-创新文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/X6ShiQDg", },
            {
    
    "channel_name": "文化-古都文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/UfLNxEFA", },
            {
    
    "channel_name": "文化-红色文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/GqJjEBWR", },
            {
    
    "channel_name": "文化-京味文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/MT7zkjsv", },
            {
    
    "channel_name": "文化-特色文化", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/hzuUSDSi", },
            {
    
    "channel_name": "文化-演出", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/VsGq9Qv2", },
            {
    
    "channel_name": "文化-影视", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/5qMQ0xSf", },
            {
    
    "channel_name": "文化-阅读", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/LYZP6P7M", },
            {
    
    "channel_name": "文化-展览", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/DXxAEzhZ", },
        ],
        # 游玩
        [
            {
    
    "channel_name": "游玩-北京故事", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/8gez50vw", },
            {
    
    "channel_name": "游玩-城区游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/4eek55dr", },
            {
    
    "channel_name": "游玩-京郊游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/enrbw8do", },
            {
    
    "channel_name": "游玩-特色主题游-古都文化游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/judrtkbd", },
            {
    
    "channel_name": "游玩-特色主题游-红色旅游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/l5tf071h", },
            {
    
    "channel_name": "游玩-特色主题游-科教游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/8ubc2gc4", },
            {
    
    "channel_name": "游玩-特色主题游-体育游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/jtquifc7", },
            {
    
    "channel_name": "游玩-特色主题游-文创艺术游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/4g6nqzpv", },
            {
    
    "channel_name": "游玩-特色主题游-休闲度假游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/6th3pk42", },
            {
    
    "channel_name": "游玩-特色主题游-长城游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/fcj713ds", },
            {
    
    "channel_name": "游玩-特色主题游-中医养生游", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/5c9yssil", },
            {
    
    "channel_name": "游玩-游玩资讯", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/bwzg2a22", },
        ],
        # 住宿
        [
            {
    
    "channel_name": "住宿-京郊度假村", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/ce682gi3", },
            {
    
    "channel_name": "住宿-酒店", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/ie1974su", },
            {
    
    "channel_name": "住宿-民宿", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/njfs2cb7", },
            {
    
    "channel_name": "住宿-农家院", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/70rbttge", },
            {
    
    "channel_name": "住宿-特色住宿", "url": "http://api-hq1712.visitbeijing.com.cn/article/list/1p2ze2jm", },
        ],
        # 环游号
        [
            {
    
    "channel_name": "环游号", "url": "http://mp.visitbeijing.com.cn/api/article/list/recommend", },
            {
    
    "channel_name": "环游号-游玩", "url": "http://mp.visitbeijing.com.cn/api/article/list/play", },
            {
    
    "channel_name": "环游号-美食", "url": "http://mp.visitbeijing.com.cn/api/article/list/food", },
            {
    
    "channel_name": "环游号-住宿", "url": "http://mp.visitbeijing.com.cn/api/article/list/house", },
            {
    
    "channel_name": "环游号-购物", "url": "http://mp.visitbeijing.com.cn/api/article/list/shopping", },
            {
    
    "channel_name": "环游号-娱展演", "url": "http://mp.visitbeijing.com.cn/api/article/list/ent", },
            {
    
    "channel_name": "环游号-行业", "url": "http://mp.visitbeijing.com.cn/api/article/list/industry", },
        ],
        # 旅游图片
        [
            {
    
    "channel_name": "旅游图片", "url": "http://s.visitbeijing.com.cn/html/pic-6-1.shtml", },
        ],
    ]
  • スタイル仕上げ

ウェブサイト全体のデータリストにあるのと同じ数のparseXがあり、

        parse_list = [
            self.parse1,  # 购物
            self.parse1,  # 美食
            self.parse1,  # 视频
            self.parse1,  # 文化
            self.parse1,  # 游玩
            self.parse1,  # 住宿
            self.parse2,  # 环球号
            self.parse3,  # 旅游图片
        ]
  • タイトルとリンクと表紙
    Item_thumbImgは、ウェブサイトのコンテンツリスト全体に画像がないため使用されていません。
# 样式1
        html = response.body.decode('utf-8')
        db = json.loads(html)

       item['title'] = i['title'].strip()  # 内容标题
       item['url'] = "http://www.visitbeijing.com.cn/a1/" + i['id']  # 拼接正文url

# 样式2
        html = response.body.decode('utf-8')
        db = json.loads(html)
		
		item['title'] = i['title'].strip()  # 内容标题
        item['url'] = "http://mp.visitbeijing.com.cn/a1/" + i['id']  # 拼接正文url
# 样式3
        Item_title = response.xpath('//div[@class="tao"]/a/@title').extract()  # 文章标题列表
        Item_url = response.xpath('//div[@class="tao"]/a/@href').extract()  # 文章链接列表
        Item_thumbImg = response.xpath('//div[@class="tao"]/a/img/@src').extract()  # 文章封面图片列表

Spiderの下のParse_detail.pyファイル

1.詳細ページのコンテンツを取得します

リストデータ詳細ページのCSSクロールスタイルを変更し、2つのスタイルを要約します。
ここに画像の説明を挿入

    # 处理详情页带格式,这里整个页面进行抓取
    	item['content'] = ""
        if 'class="mod-content"' in response.text and len(None2Str(item['content'])) < 5:
            item['content'] = response.xpath('//div[@class="mod-content"]').extract_first()
        if 'id="Article"' in response.text and len(None2Str(item['content'])) < 5:
            item['content'] = response.xpath('//div[@id="Article"]').extract_first()

2.特別な指示

一部のウェブサイトのプログラマーは、10ページと9スタイルで、ある程度熱狂的です。すべてのページを開いて詳細ページのCSS形式を確認することは不可能であるため、一般的な解決策があります。

  • コンテンツが初めてキャプチャされた後、MongoDBデータベースを開き、次のコマンドを実行して、本文を含むページデータを除外します。これらは、指定されたスタイルに従ってキャプチャされないデータですが、すべてのページのデータです。直接キャプチャされます。
db.你的表名.find({content:/body/})

ここに画像の説明を挿入

  • リンクループを開いて、mongoコマンドがコンテンツを除外しなくなるまで、詳細ページのコンテンツを処理します。

おすすめ

転載: blog.csdn.net/qq_20288327/article/details/114079922
おすすめ