当前位置:   article > 正文

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

如何抓取菜鸟教程

一、使用工具:

python3.7、pycharm、scrapy

二、实现步骤

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

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

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

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

  1. from scrapy import cmdline
  2. cmdline.execute("scrapy crawl csdn_url".split())

2、scrapy基本信息设置

首先在settings.py中进行以下设置

然后分析菜鸟教程网页,将抓取原则写入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=="\r\n":
  32. # continue
  33. if "\t" in i:
  34. continue
  35. if "\n" in i:
  36. continue
  37. if i in title:
  38. content_list.append("\n")
  39. content_list.append(i.strip())
  40. if i in title:
  41. content_list.append("\n")
  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"]) + '\n')
  7. self.ft.write(str(item["content"]) + '\n\t')
  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、结果如下

原网页

结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/764181
推荐阅读
相关标签
  

闽ICP备14008679号