通过使用scrapy爬取某学校全网

本文介绍了一个使用Scrapy框架实现的全网爬虫项目,重点讲解了如何遍历全网URL并爬取网页内容,同时过滤掉特定类型的文件链接,如.doc、.pdf等。项目源代码已上传至GitHub,提供了详细的实现过程和技术要点。
  • 通过遍历全网url 实现爬取全网内容
  • 忽略“.doc"等文件网页暂不处理,只爬取整个页面,不做清洗
  •  spider.py
    # -*- coding: utf-8 -*-
    import scrapy
    from WSYU.items import WsyuItem
    import datetime
    from urllib import parse
    from scrapy.http import Request
    
    class WsyuSpider(scrapy.Spider):
        name = 'wsyu'
        allowed_domains = ['wsyu.edu.cn']
        # start_urls = ['http://www.wsyu.edu.cn/',]
        start_urls = ['http://www.wsyu.edu.cn/',]
        html_url_set = []
        other_url_set =[]
        wenjian_end = ["@", ".pdf", ".jpg", ".gif", ".png", ".doc", ".xls", ".ppt", ".mp3", ".rar", ".zip",]
    
    
        def do_fiter(self,all_urls):
            for one_url in all_urls:
                if any(u in one_url for u in self.wenjian_end):
                    self.other_url_set.append(one_url)
                else:
                    pass
            return all_urls
    
    
    
        def parse(self, response):
            # 获取所有的地址链接
            all_urls = response.xpath('//a/@href').extract()
            all_urls = [parse.urljoin(response.url,url) for url in all_urls]
            all_urls1 = self.do_fiter(all_urls)
            # all_urls2 = list(filter(lambda x:True if x.startswith('\'http') else False, all_urls1))
            if all_urls1!=None:
                for one_url in all_urls1:
                    if one_url not in self.html_url_set and one_url not in self.other_url_set:
                        self.html_url_set.append(one_url)
                        # yield self.make_requests_from_url(one_url)
                        yield Request(parse.urljoin(response.url,one_url),callback=self.download_parse)
                        # 回调函数默认为parse
    
    
            else:
                yield Request(url=self.html_url_set[-2],callback=self.parse)
            
    
    
        def download_parse(self,response):
           
    
            item = WsyuItem()
            item['url'] = response.url
            # print(item['url'])
            item['content'] = response.text
            # print(item['content'])
            item['create_time'] = datetime.datetime.now()
            # print(item['create_time'])
            yield item
            # yield Request(url=response.url ,callback=self.parse)
            yield self.make_requests_from_url(response.url)

     

  • 源代码放在github上了:https://github.com/longbigbeard/scrapy_demo/tree/master/WSYU
  •  
  •  
  •  以上

转载于:https://www.cnblogs.com/longbigbeard/p/9716151.html

要在 PyCharm 中使用 Scrapy 爬取数据并发送邮件,可以参考以下步骤和代码示例。 ### 1. 创建 Scrapy 项目 在 PyCharm 的终端中使用以下命令创建一个新的 Scrapy 项目: ```bash scrapy startproject myproject cd myproject scrapy genspider myspider example.com ``` ### 2. 编写爬虫代码 在 `myproject/spiders/myspider.py` 中编写爬虫代码,以下是一个简单示例: ```python import scrapy class MySpider(scrapy.Spider): name = "myspider" start_urls = ['https://example.com'] def parse(self, response): # 这里是数据提取逻辑 data = response.css('div.some-class::text').getall() # 假设这里调用发送邮件函数 self.send_email(data) yield {'data': data} def send_email(self, data): import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 配置邮箱信息 sender_email = "your_email@example.com" receiver_email = "recipient_email@example.com" password = "your_email_password" message = MIMEMultipart() message["From"] = sender_email message["To"] = receiver_email message["Subject"] = "Scrapy 爬取数据通知" # 邮件正文 body = "以下是 Scrapy 爬取到的数据:\n" + "\n".join(data) message.attach(MIMEText(body, "plain")) # 发送邮件 with smtplib.SMTP("smtp.example.com", 587) as server: server.starttls() server.login(sender_email, password) text = message.as_string() server.sendmail(sender_email, receiver_email, text) ``` ### 3. 运行爬虫 在 PyCharm 的终端中运行以下命令启动爬虫: ```bash scrapy crawl myspider ``` ### 注意事项 - 要确保你的邮箱开启了 SMTP 服务,并获取到正确的 SMTP 服务器地址和端口。 - 部分邮箱可能需要使用授权码而不是密码进行登录。 - 为了提高代码的可维护性,可以将邮件发送的逻辑封装到一个独立的模块中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值