使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

一、使用工具:

python3.7、pycharm、scrapy

二、实现步骤

1、选择文件夹创建scrapy文件。首先打开cmd控制台,cd到scrapy文件夹,输入 scrapy stratproject [ ],其中【】输入你所创建的文件夹名称。

使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

然后cd csdn,注:我创建的文件夹为csdn,在文件夹下输入 scrapy genspider -t crawl csdn_url runoob.com,其中csdn_url是python文件名, runoob.com为菜鸟教程域名。该方法能够爬取一定规则的网页,之后会讲到。

使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

创建完的文件夹内容如下:

使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

最后,为了在pycharm能够运行该文件,在csdn目录下创建一个start.py,内容如下:

  1. from scrapy import cmdline

  2. cmdline.execute("scrapy crawl csdn_url".split())

2、scrapy基本信息设置

首先在settings.py中进行以下设置使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

然后分析菜鸟教程网页,将抓取原则写入csdn_url.py,直接上代码,其中start_urls为初始网页链接,rule是设定的代码规则,菜鸟教程中的链接都是https://www.runoob.com/python3/python3-作为前缀。

  1. # -*- coding: utf-8 -*-

  2. import scrapy

  3. from scrapy.linkextractors import LinkExtractor

  4. from scrapy.spiders import CrawlSpider, Rule

  5. from csdn.items import CsdnItem

  6. class CsdnUrlSpider(CrawlSpider):

  7. name = 'csdn_url'

  8. allowed_domains = ['runoob.com']

  9. start_urls = ['https://www.runoob.com/python3/python3-tutorial.html']

  10. rules = (

  11. Rule(LinkExtractor(allow=r'https://www.runoob.com/python3/python3-+'), callback='parse_item', follow=False),

  12. )

  13. def parse_item(self, response):

  14. name = response.xpath('//div[@class="article-intro"]/h1/text()').get()

  15. if response.xpath('//div[@class="article-intro"]/h1/span/text()').get():

  16. name += response.xpath('//div[@class="article-intro"]/h1/span/text()').get()

  17. contents = response.xpath('//div[@class="article-intro"]//text()').getall()

  18. title = []

  19. title.append(name)

  20. if response.xpath('//div[@class="article-intro"]/h2/text()').get():

  21. title_2 = response.xpath('//div[@class="article-intro"]/h2/text()').getall()

  22. title += title_2

  23. if response.xpath('//div[@class="article-intro"]/h3/text()').get():

  24. title_3 = response.xpath('//div[@class="article-intro"]/h3/text()').getall()

  25. title += title_3

  26. print("===============")

  27. print(name)

  28. print(title)

  29. content_list = []

  30. for i in contents:

  31. # if content==" ":

  32. # continue

  33. if " " in i:

  34. continue

  35. if " " in i:

  36. continue

  37. if i in title:

  38. content_list.append(" ")

  39. content_list.append(i.strip())

  40. if i in title:

  41. content_list.append(" ")

  42. content = " ".join(content_list)

  43. print(content)

  44. item = CsdnItem(name=name, content=content)

  45. print(item)

  46. yield item

再设置items.py,本案例只爬取教程标题和内容:

  1. import scrapy

  2. class CsdnItem(scrapy.Item):

  3. name = scrapy.Field()

  4. content = scrapy.Field()

最后在pipelines.py设置储存方式与路径,分别储存为json格式和txt格式:

  1. from scrapy.exporters import JsonLinesItemExporter

  2. class CsdnPipeline(object):

  3. def process_item(self, item, spider):

  4. self.fp = open("cainiao.json", "wb")

  5. self.ft = open("cainiao.txt", "a", encoding="utf-8")

  6. self.ft.write(str(item["name"]) + ' ')

  7. self.ft.write(str(item["content"]) + ' ')

  8. self.exporter = JsonLinesItemExporter(self.fp, ensure_ascii=False, encoding="utf-8")

  9. self.exporter.export_item(item)

  10. return item

  11. def close_spider(self, spider):

  12. self.fp.close()

  13. self.ft.close()

3、结果如下

原网页使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

结果:

使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

使用scrapy框架爬取菜鸟教程上python3教程,并保存为txt文档。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...