快乐学习
前程无忧、中华英才非你莫属!

Day2-分布式爬虫并打造搜索引擎全过程

一、基础篇
1、回顾正则表达式
http://www.ztloo.com/2017/07/09/day13-人生苦短我学python/

2、深度优先,广度优先算法的理解

    java案例篇:https://segmentfault.com/a/1190000002685939
3、明确爬取网站的内容

伯乐在线 :http://www.jobbole.com/ 中的技术文章,在二级域名下:http://blog.jobbole.com/






4、 建立scrapy项目

因pycharm 没提供直接新建Scrapy项目的方式,所以我们要手动新建,然后在引入到Pycharm里面

去看相对应的版本的Scrapy 官方手册,看人家怎么建立的:
https://doc.scrapy.org/en/latest/intro/tutorial.html
scrapy startproject BoleOnline
导入到Pycharm中


scrapy genspider   jobbole  blog.jobbole.com


执行爬取操作:scrapy crawl jobbole
报错,因为在windows上少了个组件需要安装:pip install -i https://pypi.douban.com/simple/ pypiwin32
因使用命令行,比较麻烦,所以我们这里自己写执行命令到Pycharm里面来代替手工的cmd命令~
# -*- coding: utf-8 -*-
from scrapy.cmdline import execute
import sys
import os
# print(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy","crawl","jobbole"])

XPath详解
http://funhacks.net/2016/05/08/使用XPath解析HTML文档/

Scrapy  小案例
 
咱们就抓已给目标页面的H3上的标题。
#-*- coding: utf-8 -*-
import scrapy
import  re
class JobboleSpider(scrapy.Spider):
    name = 'jobbole'
    allowed_domains = ['blog.jobbole.com']
    start_urls = ['http://blog.jobbole.com/112233/']
    def parse(self, response):
        # 测试
        re_selector = response.xpath("//*[@id='post-112233']/div[3]/h3[1]/text()").extract()[0]
        # 获取文章的标题
        re_title = response.xpath("//*[@id='post-112233']/div[1]/h1/text()").extract()[0]
        # 获取文章的创建日期
        re_create_date = response.xpath("//*[ @ id = 'post-112233']/div[2]/p/text()")
            .extract()[0]
            .strip()
            .replace(" ·","")
            .strip()
        # 获取点赞数
        re_dianGood_number = response.xpath("  // *[ @ id = '112233votetotal']/text() ").extract()[0]
       # 使用contains方法获取收藏数
        re_get_number = response.xpath("//span[contains(@class,'bookmark-btn')] /text() ").extract()[0]
        # 利用正则表达式,过滤掉不要的字符
        re_math = re.match(".*(d+).*",re_get_number)
        if re_math:
            re_get_number = re_math.group(1)
            # 使用contains方法获取评论数
        re_talk_number = response.xpath("//a[contains(@href,'#article-comment')]/span/text() ").extract()[0]
        # 利用正则表达式,过滤掉不要的字符
        re_math = re.match(".*(d+).*", re_talk_number)
        if re_math:
            re_talk_number = re_math.group(1)
        # 获取正文内容
        re_content = response.xpath("//div[@class='entry']") .extract()[0]
        # 获取文章头标签
        re_tag = response.xpath("//p[@class='entry-meta-hide-on-mobile']/a/text()") .extract()
        # 过滤掉评论
        re_tag = [element for element in re_tag if not element.strip().endswith("评论")]
        tags =",".join(re_tag);
        # 测试输出
        print(re_selector)
        # 输出文章标题
        print(re_title)
        # 输出文章创建日期
        print(re_create_date)
        # 输出点赞数
        print(re_dianGood_number)
        # 输出收藏数
        print(re_get_number)
        # 输出评论数
        print(re_talk_number)
        # 输出文章主题标签
        print(tags)
        # 输出正文内容
        print(re_content)
        pass
运行结果


打赏

未经允许不得转载:同乐学堂 » Day2-分布式爬虫并打造搜索引擎全过程

分享到:更多 ()

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    世间博客不少,风景这边独好!

    笑八达1年前 (2017-08-29)回复

特别的技术,给特别的你!

联系QQ:1071235258QQ群:226134712
error: Sorry,暂时内容不可复制!