看本篇博客的时候,你要有python基础语法的知识以及面向对象的思想,还有你的电脑上已经安装了scrapy,如果没有安装,
请看我的另一篇文章,传送门:
https://blog.csdn.net/qq_38230338/article/details/80646798
好的,切入正题。
首先我们在cmd中输入 scrapy startproject ArticleSpider
这样就创建一个ArticleSpider的scrapy,如下图:
然后在ArticleSpider文件夹里面 打开cmd(shift+鼠标右键)输入 scrapy gensipder jobble jobble.blog.com
就会在spiders文件夹下面创建了一个 jobble.py,如图:
然后我们的代码的逻辑主要就是在jobble.py下面进行书写:
# -*- coding: utf-8 -*-
import scrapy
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://blog.jobbole.com/all-posts/']
def parse(self, response):
pass
这个是一开始创建时候自带的代码,我给解释一下。
name值必须有,因为我们要启动这个爬虫,是通过这个name的值来启动的。
allowed_domains 就是允许的域名 这个没啥意思
start_urls 时一个list 里面可以放一个或多个url,start_urls的网址就是第一个进行解析的网址。
def parse(self,response)函数 就是对你传过来的url进行解析
我们先做一下分析,想爬取文章,我们需要知道每一个文章的url以及下一页的url(用于获取下一页文章的url),明确之后,
我们就在def parse(self,response)函数里面写我们的逻辑:
def parse(self, response):
#获取url
post_nodes=response.css('#archive .floated-thumb .post-thumb a') //通过css找到每个文章的超链接
for post_node in post_nodes: //进行遍历
post_url=post_node.css('::attr(href)').extract()[0] //获取每个a标签的href属性
parse.urljoin的意思是就是将不完整的地址,按照第一个参数的形式拼接起来。
yield Request(url=parse.urljoin(response.url,post_url),callback=self.detail_parse) //这个意思就是发送请求,传给回掉函数self.detail_parse
#获取下一页urlnext_url=response.css('.next.page-numbers::attr(href)').extract()[0] //获取下一页的超链接
yield Request(url=parse.urljoin(response.url,next_url),callback=self.parse) 传给self.parse函数,
也就是它本身,在获取下一页文章的a标签的href。实现循环
def detail_parse(self, response):
#文章详情页面数据抓取
# try:
title=response.xpath('//div[@class="entry-header"]/h1/text()').extract()[0]
create_time=response.xpath('//div[@class="entry-meta"]/p/text()[1]').extract()[0]
content=response.xpath('//div[@class="entry"]').extract()[0]
# print(content)
prasie=response.xpath('//span[contains(@class,"vote-post-up")]/h10/text()').extract()[0]
collect=response.xpath('//span[contains(@class,"bookmark-btn")]/text()').extract()[0]
collect_num=re.match(".*?(\d+).*",collect)
if collect_num:
print(collect_num.group(1))
else:
collect_num=0
comment=response.xpath('//a[@href="#article-comment"]/span/text()').extract()[0]
comment_num=re.match(".*?(\d+).*",comment)
if comment_num:
print(comment_num.group(1))
else:
comment_num=0
except Exception as e:
print(e)
finally:
print('爬取中,勿扰!')
然后我们就可以运行这个程序,实现页面抓取了,这里还得了解xpath语法还有正则表达式哦。
昨天偷摸把澳门赌场(老司机懂得)的网站还给爬下来了,哈哈。 爬澳门赌场的简单,如果你们需要,评论扣1。
如果有什么不明白,评论哦。