• 售前

  • 售后

热门帖子
入门百科

python实现Scrapy爬取网易消息

[复制链接]
蜜蜜ss2017 显示全部楼层 发表于 2021-10-26 12:44:18 |阅读模式 打印 上一主题 下一主题
1. 新建项目

在下令行窗口下输入
  1. scrapy startproject scrapytest
复制代码
, 如下


然后就主动创建了相应的文件,如下


2. 修改itmes.py文件

打开scrapy框架主动创建的items.py文件,如下
  1. # Define here the models for your scraped items
  2. #
  3. # See documentation in:
  4. # https://docs.scrapy.org/en/latest/topics/items.html
  5. import scrapy
  6. class ScrapytestItem(scrapy.Item):
  7. # define the fields for your item here like:
  8. # name = scrapy.Field()
  9. pass
复制代码
编写内里的代码,确定我要获取的信息,比如消息标题,url,时间,泉源,泉源的url,消息的内容等
  1. class ScrapytestItem(scrapy.Item):
  2. # define the fields for your item here like:
  3. # name = scrapy.Field()
  4. title = scrapy.Field()
  5. timestamp = scrapy.Field()
  6. category = scrapy.Field()
  7. content = scrapy.Field()
  8. url = scrapy.Field()
  9. pass
复制代码
3. 定义spider,创建一个爬虫模板

3.1 创建crawl爬虫模板

在下令行窗口下面 创建一个crawl爬虫模板(留意在文件的根目次下面,指令查抄别输入错误,-t 表示利用后面的crawl模板),会在spider文件夹生成一个news163.py文件
  1. scrapy genspider -t crawl codingce news.163.com
复制代码
然后看一下这个‘crawl'模板和一样寻常的模板有什么区别,多了链接提取器还有一些爬虫规则,如许就有利于我们做一些深度信息的爬取
  1. import scrapy
  2. from scrapy.linkextractors import LinkExtractor
  3. from scrapy.spiders import CrawlSpider, Rule
  4. class CodingceSpider(CrawlSpider):
  5. name = 'codingce'
  6. allowed_domains = ['163.com']
  7. start_urls = ['http://news.163.com/']
  8. rules = (
  9.   Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
  10. )
  11. def parse_item(self, response):
  12.   item = {}
  13.   #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
  14.   #item['name'] = response.xpath('//div[@id="name"]').get()
  15.   #item['description'] = response.xpath('//div[@id="description"]').get()
  16.   return item
复制代码
3.2 补充知识:selectors选择器

支持xpath和css,xpath语法如下
  1. /html/head/title
  2. /html/head/title/text()
  3. //td (深度提取的话就是两个/)
  4. //div[@class=‘mine']
复制代码
3.3. 分析网页内容

在谷歌chrome欣赏器下,打在网页消息的网站,选择查看源代码,确认我们可以获取到itmes.py文件的内容(实在那内里的要获取的就是查看了网页源代码之后确定可以获取的)
确认标题、时间、url、泉源url和内容可以通过查抄和标签对应上,比如正文部分
主体

标题

时间

分类

4. 修改spider下创建的爬虫文件

4.1 导入包

打开创建的爬虫模板,进行代码的编写,除了导入体系主动创建的三个库,我们还须要导入news.items(这里就涉及到了包的概念了,最开始说的–init–.py文件存在阐明这个文件夹就是一个包可以直接导入,不须要安装)
留意:
  1. 使用的类ExampleSpider一定要继承自CrawlSpider,因为最开始我们创建的就是一个‘crawl'的爬虫模板,对应上
复制代码
  1. import scrapy
  2. from scrapy.linkextractors import LinkExtractor
  3. from scrapy.spiders import CrawlSpider, Rule
  4. from scrapytest.items import ScrapytestItem
  5. class CodingceSpider(CrawlSpider):
  6. name = 'codingce'
  7. allowed_domains = ['163.com']
  8. start_urls = ['http://news.163.com/']
  9. rules = (
  10.   Rule(LinkExtractor(allow=r'.*\.163\.com/\d{2}/\d{4}/\d{2}/.*\.html'), callback='parse', follow=True),
  11. )
  12. def parse(self, response):
  13.   item = {}
  14.   content = '<br>'.join(response.css('.post_content p::text').getall())
  15.   if len(content) < 100:
  16.    return
  17.   return item
复制代码
Rule(LinkExtractor(allow=r'..163.com/\d{2}/\d{4}/\d{2}/..html'), callback=‘parse', follow=True), 此中第一个allow内里是誊写正则表达式的(也是我们核心要输入的内容),第二个是回调函数,第三个表示是否允许深入
终极代码
  1. from datetime import datetime
  2. import re
  3. import scrapy
  4. from scrapy.linkextractors import LinkExtractor
  5. from scrapy.spiders import CrawlSpider, Rule
  6. from scrapytest.items import ScrapytestItem
  7. class CodingceSpider(CrawlSpider):
  8. name = 'codingce'
  9. allowed_domains = ['163.com']
  10. start_urls = ['http://news.163.com/']
  11. rules = (
  12.   Rule(LinkExtractor(allow=r'.*\.163\.com/\d{2}/\d{4}/\d{2}/.*\.html'), callback='parse', follow=True),
  13. )
  14. def parse(self, response):
  15.   item = {}
  16.   content = '<br>'.join(response.css('.post_content p::text').getall())
  17.   if len(content) < 100:
  18.    return
  19.   title = response.css('h1::text').get()
  20.   category = response.css('.post_crumb a::text').getall()[-1]
  21.   print(category, "=======category")
  22.   time_text = response.css('.post_info::text').get()
  23.   timestamp_text = re.search(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', time_text).group()
  24.   timestamp = datetime.fromisoformat(timestamp_text)
  25.   print(title, "=========title")
  26.   print(content, "===============content")
  27.   print(timestamp, "==============timestamp")
  28.   print(response.url)
  29.   return item
复制代码

到此这篇关于python实现Scrapy爬取网易消息的文章就先容到这了,更多干系python Scrapy爬取网易消息内容请搜刮草根技术分享以前的文章或继承欣赏下面的干系文章渴望大家以后多多支持草根技术分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作