初学scrapy框架遇到的坑(下)

本文详细介绍了使用Scrapy框架爬取博客文章的具体过程,包括如何定位目标元素、解析页面内容及存储数据。通过实例演示了从获取博客标题、链接到完整内容的爬取技巧,并分享了在实际操作中遇到的问题及解决办法。
摘要由CSDN通过智能技术生成

接上:
初学scrapy框架遇到的坑(上)
初学scrapy遇到的坑(中)
在前面两个中已经爬取了博客的标题和链接,在这里继续前面的步骤,开始爬取博客的内容部分。

# -*- coding: utf-8 -*-
import scrapy
from bs4 import BeautifulSoup
from ..items import BlogScrapyItem
class BlogSpider(scrapy.Spider):
    name = 'blog'
    allowed_domains = ['https://www.cnblogs.com/']
    start_urls = ['https://www.cnblogs.com/']

    def parse(self, response):
        content=response.text
        soup=BeautifulSoup(content,'lxml')
        targets=[]
        titles=soup.find_all('a',class_='titlelnk')
        length=len(titles)
        for i in range(length):
            target=BlogScrapyItem()
            title=titles[i].text
            link=titles[i]['href']
            #变成字典
            target["title"]=title
            target["link"]=link
            targets.append(target)
        return targets

修改这里面的代码。
以上是很久之前所写。


# -*- coding: utf-8 -*-
import scrapy
from bs4 import BeautifulSoup
from ..items import BlogScrapyItem
class BlogSpider(scrapy.Spider):
    name = 'blog'
    #allowed_domains = ['https://www.cnblogs.com/']
    start_urls = ['https://www.cnblogs.com/']

    def parse(self, response):
        content=response.text
        soup=BeautifulSoup(content,'lxml')
        targets=[]
        titles=soup.find_all('a',class_='post-item-title')

        cons=soup.find_all('p',class_='post-item-summary')
        length=len(titles)
        for i in range(length):
            target=BlogScrapyItem()
            title=titles[i].text
            link=titles[i]['href']
            con=cons[i].text.strip()
            print('第%s篇博客的title为:%s' % (i + 1, title))
            print('链接:%s' % link)
            print(con)
            # 变成字典
            target["title"] = title
            target["link"] = link
            target["con"]=con
            targets.append(target)
        return targets

这篇文章与上两篇相隔太久,网页竟然有所变动。
抓取的代码与上面有所不同
修改pipelines.py代码

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


class BlogScrapyPipeline:
    path='F:/pycharm文件/document/target.csv'
    def __init__(self):
        self.mytarget=open(self.path,'a+',encoding='utf-8')


    def process_item(self, item, spider):
        title=item["title"]
        link=item["link"]
        con=item["con"]
        content=title+'\n'+link+'\n'+con
        self.mytarget.write(content)
        return item

运行结果
在这里插入图片描述
看一下本地目录
在这里插入图片描述
爬取完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值