5分钟 学会scrapy 爬虫框架

本文详细介绍了使用Scrapy框架进行网站爬虫的全过程,包括项目的创建、定义item、编写spider以及数据的提取与保存。通过实例展示了如何从指定网站抓取新闻标题、链接和描述,并将数据存储至数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建一个scrapy 项目
定义提取的item
编写网站的spider 并提取item
提取数据保存到数据库
#创建项目 scrapy startproject bmlink
在这里插入图片描述
![会显示这样的,scrapy.cfg :项目的配置文件
bmlink :python 模块
items.py item 文件
pipelines.py 管道
#定义item
保存爬取数据的容器

import scrapy 
class BmlinkSpiderItem(scrapy.Item):
title = scrapy.Field()
source_url = scrapy.Field()
desc = scrapy.Field()

#编写第一个spider

import hashlib
import re 
import scrapy
from urlparse import urljoin
from bnlink_spider.items import BmlinkSpiderItem
class BmlinkSpider(scrapy.Spider):
    name = 'bmlink'
    cate1_id =1
    cate2_id = 6
    source = '中国建材网‘
    allowed_domains =['bmlink.com']
    start_urls = ['https://www.bmlink.com/news/']
    def start_requests(self):
        for i in range(302):
           url = "https://www.bmlink.com/news/list-10-%s.html' % (str(i+1))
           if url is not None:
               yield scrapy.Request(url,callback=self.parse2)

def parse2(self,response):
    url = response.xpath('//*[@class="news_list2"]/ul/li/a[1]/@href').extract()
    for i in url:
        Item = BmlinkSpiderItem()
        source_url = urljoin("https://www.bmlink.com/",i)
        Item ['table_num'] = num
        if source_url is not None:
            yield scrapy.Request(
               source_url,
               callback= self.parse3,
               meta ={'Item':Item}
               )
              
        
        
 def parse3(self, response):
        '''详情页信息'''
        if response.status == 200:
            try:
                title = response.xpath('//h1[@class="c_red"]/text()').extract()[0]
                desc = response.xpath('//div[@class="newsinfo_cont"]').extract()[0]
                pattern = re.compile(r'【<strong>.*?</strong>】')
                desc = pattern.sub('', desc)
                desc = re.compile(r'<img .*?>')
                desc = pattern.sub('', desc)
                print (desc)
                print(title)
            except:
                title = None
                desc = None
                pass
            if title !=None:
                title = str(title).strip()

                Item = response.meta["Item"]
                Item["title"] = title
                Item["desc"] = desc
                Item["cate1_id"] = self.cate1_id
                Item["cate2_id"] = self.cate2_id
                Item["source"] = self.source
                Item["industry"] = 1

                yield Item


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓶瓶罐罐的

如果帮助到你了,请来点实际的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值