python爬虫入门--odoo内应用

此文章向大家介绍一个python入门级爬虫,本人也是初次尝试,如有缺陷,欢迎指正。

本次主要以网易新闻为例,爬取新闻标题,内容,来源,时间,等信息。

首先打开网易新闻网页,点击国内新闻,以这个分类栏为例,点击鼠标右键看一下源代码,发现并没有直接看到新闻列表以及新闻内容,所以可以确定是通过api接口获取数据的方式对页面进行渲染的,所以我们按F12打开浏览器控制台,找到对应的数据获取接口。

点击Network,筛选一下js,找到response有新闻信息的那条请求。
在这里插入图片描述

继续往下翻,会发现会出现更多类似/special/00804KVA/cm_guonei_0{}.js?的请求,这是一个简单的分页加载。可以看到这些接口的地址都有一定的规律:“cm_guonei_03.js”、 “cm_guonei_04.js”,所以本次要抓取的链接如下:
https://temp.163.com/special/00804KVA/cm_guonei_0{}.js

接下来就可以进入代码环节,首先引入需要用到的几个python包:

import json
import requests
from bs4 import BeautifulSoup

requests库用来进行网络请求,模拟浏览器获取资源。
json库用来解析api接口的response。
BeautifulSoup是用来解析html文档的,可以很方便的帮我们获取指定div的内容。

接下来开始编写一个获取指定页码内数据的方法,由于本人是做odoo开发,所以顺便做了odoo内的数据可视化,与原生python稍有不同。

	@api.model
    def get_page(self,page=False):
        url_temp = 'https://temp.163.com/special/00804KVA/cm_guonei_0{}.js'
        return_list = []
        for i in range(page):
        	# 第一页请求连接没有页码,分开写
            if page == 1:
                url = 'https://temp.163.com/special/00804KVA/cm_guonei.js'
            else:
                url = url_temp.format(i)
            response = requests.get(url)
            if response.status_code != 200:
                continue
            content = response.text  # 获取响应正文
            # 格式化json字符串
            result = json.loads(content[14:-1].replace(' ','').replace('\n',''))
            return_list.append(result)
            # odoo数据库创建数据
            for rec in result:
                self.create({
                    'title': rec['title'],
                    'label': rec['label'],
                    'source': rec['source'],
                    'time': rec['time'],
                    'keywords': ','.join([k['keyname'] for k in rec['keywords']]),
                    'docurl': rec['docurl']
                })
        return return_list

调用这个方法可以得到每个页码对应的数据内容:

在这里插入图片描述

展开其中一项可以看到,本次抓取包含了标题、时间、来源、正文html等信息。
在这里插入图片描述
接下来,可以尝试抓取正文部分,正文url已经获取(docurl)。
首先分析一下正文的html页面,浏览器打开其中一个url,鼠标右键打开查看源码,可以看到:
文章来源在文档中的位置:id = “ne_article_source” 的 a 标签
正文在文档中的位置:class = “content” 的 div 标签
等等
下面尝试采集这几个信息:

    @api.model
    def get_content(self,url_content):
        url_content = 'https://dy.163.com/article/FMO5JGEG0514R9OJ.html'

        resp = requests.get(url_content)
        if resp.status_code == 200:
            body = resp.text
            bs4 = BeautifulSoup(body,'html.parser')
            # 来源
            source = bs4.find('a', id='article_title').get_text()
            # 正文
            content = bs4.find('div', class_='content').get_text()

        return content

抓取到的内容如下:
在这里插入图片描述
在这里插入图片描述
接下来你可以按照自己想要的格式对抓取到的内容格式化。

整合到odoo内:
在这里插入图片描述














文章参考:小白也能懂得python爬虫入门教程

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值