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

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

前言

很简单的一个例子,玩一上午,原来是.extract_first("")  这个取值的问题!

以下是爬取伯乐在线,所有最新文章页的标题,主题、创建时间、评论数、分享、点赞的数量!已经调通,可直接copy

运行!

运行代码

from scrapy.cmdline import execute
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy","crawl","jobbole"])

逻辑代码

jobbole.py
import scrapy
import re
from scrapy.http import Request
from urllib import parse
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://blog.jobbole.com/all-posts/']
def parse(self, response):
# 获取 下一页面的url并交给scrapy进行下载
post_urls = response.css("#archive .floated-thumb .post-thumb a::attr(href)").extract_first("")
for post_url in post_urls:
yield Request(url=parse.urljoin(response.url, post_url), callback=self.parse_detail)
# 必须考虑到有前一页,当前页和下一页链接的影响,使用如下所示的方法
next_url = response.css(".next.page-numbers::attr(href)").extract_first("")
if next_url:
yield Request(url=parse.urljoin(response.url, next_url), callback=self.parse)
def parse_detail(self, response):
# 获取文章的标题
re_title = response.xpath("/html//div[@class='entry-header']/h1/text()").extract_first("")
# 获取文章的创建日期
re_create_date = response.xpath("//p[@class='entry-meta-hide-on-mobile']/text()").extract_first("").strip().replace(" ·","").strip()
# 获取点赞数
re_dianGood_number = response.xpath('//span[contains(@class,"vote-post-up")]/h10/text()').extract_first("")
# 利用正则表达式,过滤掉不要的字符
re_math = re.match(".*?(d+).*", re_dianGood_number)
if re_math:
re_dianGood_number = re_math.group(1)
else:
re_dianGood_number = 0
# 使用contains方法获取收藏数
re_get_number = response.xpath("//span[contains(@class,'bookmark-btn')] /text() ").extract_first("")
# 利用正则表达式,过滤掉不要的字符
re_math = re.match(".*?(d+).*",re_get_number)
if re_math:
re_get_number = re_math.group(1)
else:
re_get_number = 0
# 使用contains方法获取评论数
re_talk_number = response.xpath("//a[contains(@href,'#article-comment')]/span/text() ").extract_first("")
# 利用正则表达式,过滤掉不要的字符
re_math = re.match(".*?(d+).*", re_talk_number)
if re_math:
re_talk_number = re_math.group(1)
else:
re_talk_number = 0
# 获取正文内容
re_content = response.xpath("//div[@class='entry']") .extract_first("")
# 获取文章头标签
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_title)
# 输出文章创建日期
print(re_create_date)
# 输出点赞数
print(re_dianGood_number)
# 输出收藏数
print(re_get_number)
# 输出评论数
print(re_talk_number)
# 输出文章主题标签
print(tags)
# 输出正文内容
print(re_content)
pass
打赏

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

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

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

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