此文章向大家介绍一个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爬虫入门教程