⽤xpath⽅法提取⽹页内容保存为json格式⽤Xpath⽅法提取⽹页内容保存为json格式
张艺谋几个老婆几个娃看到这个⽹页,⾸先分析需要爬取的内容:标题、点赞数、图⽚……
打开虚拟环境,在Scrapy shell中调试
提取标题⽂字
按照上述⽅法,对⽂章作者、评论数、点赞数等进⾏提取。
debug⼀下,发现要抓取的内容都可以实现。
和谐号和复兴号的区别下⾯把⽂件配置⼀下,抓取下来并保存为json格式。
items的编写
⽂件中有 items.py ,这个⾥⾯是⽤来封装爬⾍所爬取的字段,如:标题、作者、时间等
import scrapy
class ArticleSpiderItem(scrapy.Item):
title = scrapy.Field()
中国好声音王拓create_data = scrapy.Field()
author = scrapy.Field()
praise_num = scrapy.Field()
comment_num = scrapy.Field()
content = scrapy.Field()
Spider的编写
Spider是⽤户编写从⽹站爬取数据的类。其中包含了⽤于下载的初始化URL,⽹页中的链接及分析⽹页中的内容,提取⽣成 item的⽅法。
# -*- coding: utf-8 -*-
import re
import scrapy
from ArticleSpider.items import ArticleSpiderItem
class JobboleSpider(scrapy.Spider):
name = "jobbole"
allowed_domains = ["blog.jobbole"]
天龙八部之傲立中原start_urls = ['top.jobbole/38569/']
def parse(self, response):
article_item = ArticleSpiderItem()
#标题:
title = response.xpath('//div[@class="media-body"]/h1/a/text()').extract_first()
#发布⽇期:
create_data = response.xpath('//div[@class="media-body"]/p/span[1]/text()').extract_first()
#⽂章作者:
author = response.xpath('//div[@class="media-body"]/p/span[3]/a[2]/text()').extract_first()
#点赞数:
praise_num = response.xpath('//div[@class="post-adds"]/span[1]/h10/text()').extract_first()
#评论数:
comment_num = response.xpath('//div[@class="media-body"]/p/span[4]/a/text()').extract_first()
#⽤正则表达式只提取数字。
match_re = re.match(".*?(\d+).*", comment_num)
if match_re:
comment_num = up(1)
#提取正⽂内容
content = response.xpath('//div[@class = "p-entry"]').extract_first()
article_item["title"] = title
article_item["create_data"] = create_data
article_item["author"] = author
article_item["praise_num"] = praise_num
article_item["comment_num"] = comment_num
article_item["content"] = content
yield article_item
pipelines 的设置
对所抓取的内容进⾏ json 格式保存。
寄快递到国外
曾恺玹import json
import codecs
class JsonWithEncodingPipeline(object):
#⾃定义json⽂件的导出
def__init__(self):
self.file = codecs.open('Article.json', 'w', encoding="utf-8")
def process_item(self, item, spider):
lines = json.dumps(dict(item), ensure_ascii=False) + "\n"
self.file.write(lines)
return item
def spider_closed(self, spider):
self.file.close()
settings 的编写
主要是配置⽂件。
ITEM_PIPELINES = {
'ArticleSpider.pipelines.JsonWithEncodingPipeline': 300,
}
编写 main 函数
在PyCharm中运⾏爬⾍
dline import execute
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy", "crawl", "jobbole"])