重磅!PYTHON实战使用SCRAPY框架爬取伯乐在线 5000多条数据

看本篇博客的时候,你要有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

    #获取下一页url
    next_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。

如果有什么不明白,评论哦。

  







猜你喜欢

转载自blog.csdn.net/qq_38230338/article/details/80673957
今日推荐