【新闻推荐系统】(task3)Scrapy基础及新闻爬取实战

【新闻推荐系统】(task3)Scrapy基础及新闻爬取实战,第1张

【新闻推荐系统】(task3)Scrapy基础及新闻爬取实战 学习总结
  • 回顾之前的爬虫(八)Scrapy爬虫框架。scrapy爬虫的使用步骤:
    • 创建一个工程和spider模板
    • 编写spider
    • 编写item pipeline
    • 优化配置策略
  • 为了在推荐系统中不断获取数据,本次task为(新闻推荐实战)数据层—构建物料池之scrapy爬虫框架基础:Scrapy框架有固定的文件结构、类和方法,在实际使用过程中一般是编写item pipelines和spider(里面的自定义爬取器类)两个文件代码。

文章目录
  • 学习总结
  • 一、Scrapy的简介与安装
    • 1.0 爬虫工具介绍
      • (1)requests库
      • (2)request爬取网页的通用框架
      • (3)Scrapy框架
    • 1.1 Scrapy安装
    • 1.2 scrapy项目结构
  • 二、scrapy项目结构详解
    • 2.1 spider的抓取周期
    • 2.2 Xpath语言
      • (1)xpath路径表达式
      • (2)熟悉xpath基本语法
  • 三、scrapy爬取新闻内容实战
    • 3.1 环境准备:
    • 3.2 项目逻辑:
      • 1. 创建一个scrapy项目:
      • 2. 实现item.py逻辑(敲黑板)
      • 3. 实现sina.py (spider)逻辑(敲黑板)
      • 4. 数据持久化实现,piplines.py(敲黑板)
      • 5. 配置文件,settings.py
      • 6. 监控脚本,monitor_news.py
      • 7. 运行脚本,run_scrapy_sina.sh
      • 8. 运行项目命令
  • Reference

一、Scrapy的简介与安装

python环境的安装:
python 环境,使用miniconda搭建,安装miniconda的参考链接:https://blog.csdn.net/pdcfighting/article/details/111503057。

在安装完miniconda之后,创建一个新闻推荐的虚拟环境,可以将其命名为news_rec_py3,这个环境将会在整个新闻推荐项目中使用。

conda create -n news_rec_py3 python==3.8
1.0 爬虫工具介绍

需要掌握定向网络数据爬取和网页解析的基本能力。

requests库和scrapy爬虫框架对比:

  • 相同点:可用性逗号,文档丰富,入门简单,都没有处理js、提交表单、应对验证码等功能(可扩展)。
  • requests:页面级爬虫,有功能库,并发性考虑不足,重点在于页面下载、定制灵活,上手简单;scrapy:网站级爬虫,是框架,并发性好,重点在于爬虫结构;一般定制灵活,深度定制困难。
  • 非常小的需求可以用requests库;大一点的需求用scrapy框架,定制程度很高的需求用自搭框架。
(1)requests库

get构造一个向服务器请求资源的Requst对象,返回一个包含服务器资源的Response对象。

# -*- coding: utf-8 -*-
"""
Created on Tue Dec 21 09:10:31 2021

@author: 86493
"""
import requests
r=requests.get("http://www.baidu.com")

#检测请求的状态码,200则访问成功
r.status_code 
# 200

#如果没有赋值则显示'ISO-8859-1',显示的不是正常字符
r.encoding='utf-8' 
r.text

type(r)
# requests.models.Response

r.headers #返回访问页面的头部信息
"""
{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 
 'Connection': 'keep-alive', 
 'Content-Encoding': 'gzip', 
 'Content-Type': 'text/html', 
 'Date': 'Tue, 21 Dec 2021 01:10:54 GMT', 
 'Last-Modified': 'Mon, 23 Jan 2017 13:27:56 GMT', 
 'Pragma': 'no-cache', 
 'Server': 'bfe/1.0.8.18', 
 'Set-cookie': 'BDORZ=27315; 
 max-age=86400; domain=.baidu.com; 
 path=/', 'Transfer-Encoding': 'chunked'}
"""
(2)request爬取网页的通用框架
def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status() #如果状态不是200,引发HTTPEroor异常
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return "产生异常"
 
if __name__=="__main__":
    url="http://www.baidu.com"
    print(getHTMLText(url))

检测请求的状态码为200(表示访问成功,如果是404则失败),爬取后返回http响应内容的字符串形式,即百度url对应的页面内容:


 百度一下,你就知道 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5679690.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存