c语言怎么将数据写入txt文档_scrapy爬虫实例(七):巧妙使用string()方法爬取整篇文章并写入txt...

本文介绍了如何使用Scrapy爬虫框架抓取网页上的整篇文章,并利用string()方法处理HTML标签,将内容写入TXT文档。在过程中,通过正则表达式过滤不需要的数据,成功实现了森林防火主题班会教案的爬取和存储。
摘要由CSDN通过智能技术生成

时间:2018年12月

网站:百分网

内容:爬取整篇文章,并写入txt文档

因为需要用到一些文章,要下载森林防火主题班会教案的整篇内容,但是复制的时候被网站弹出窗口给屏蔽了。所以用scrapy把他们都爬出来,并写入txt文档。

a53f35327feb5a4c041108694aaf0beb.png

代码写好了爬出来有个缺点,就是黑体字放在p标签里面的strong,没办法和p/text()一起拿到,

225ef01787652ceffc4fbb06e516f2a0.png

换作string来达到目的:

要把 标签下的所有文本提取出来,并放入同一个字符串中,可以使用xpath的string()方法,另外,在xpath语法里面,点(.)表示当前节点

import scrapy
import re
from jiaoan.items  import JiaoanItem

class DemoSpider(scrapy.Spider):
    name = 'demo'

    start_urls = ['http://www.oh100.com/kaoshi/jiaoan/261501.html']

    def parse(self, response):
        """
        txt = response.xpath('//div[@class="content"]//p/text()').extract()
        for each_txt in txt:
            item = JiaoanItem()
            item['txt'] = each_txt
            yield item
            print(item)   这样写只能获得正文部分,提取不到黑体字
        """
        txt = response.xpath('//div[@class="content"]')
        text = txt.xpath('string(.)').extract()
        content = ""
        item = JiaoanItem()
        for i in text:
            content += str(i.strip())
            item['txt'] = i.strip()
        print('*****************n%sn******************'%content)
        yield item

接下来又发现一个问题,那就是这样的爬取方式把网页最后一段黑体字也爬进去了,而这个又是不需要的:

5c0bcef99930f83cd3e7f0c28542b963.png

于是在写入txt的过程中在pipelines.py用正则表达式排除掉:

import codecs
import os
import re

class JiaoanPipeline(object):#需要在setting.py里设置'coolscrapy.piplines.CoolscrapyPipeline':300
    def process_item(self, item, spider):
        # 获取当前工作目录
        base_dir = os.getcwd()
        fiename = base_dir + '/jiaoan.txt'
        # 从内存以追加的方式打开文件,并写入对应的数据
        with open(fiename, 'a') as f:
            text = str(item['txt']).replace('n', '@@')
            text = re.findall('(.*)更多防火安全', text)[0]
            text = str(text).replace('@@', 'n')
            f.write(text)

        return item

最终成功爬取到txt:

512622ceac9918b19e1522ced1a1fe94.png

本文特别感谢经典之路的指导!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值