js 爬虫抓取网页数据(此文属于入门级级别的爬虫,老司机们就不用看了)

优采云 发布时间: 2021-11-03 07:09

  js 爬虫抓取网页数据(此文属于入门级级别的爬虫,老司机们就不用看了)

  本文属于入门级爬虫,老司机无需阅读。html

  这次主要是抓取网易新闻,包括新闻标题、作者、来源、发布时间、新闻正文。Python

  首先我们打开163的网站,我们随意选择一个分类,我这里选择的分类是国内新闻。然后右键查看源码,发现源码中页面中间没有新闻列表。这说明这个页面是异步的。即通过api接口获取的数据。面试

  然后确认可以使用F12打开谷歌浏览器的控制台后,点击网络,我们一直往下滚动,发现右侧:“... special/00804KVA/cm_guonei_03.js?.. ..》这样的地址,点击Response,发现就是我们要找的api接口。json

  

  可以看出这些接口的地址有一定的规律:“cm_guonei_03.js”、“cm_guonei_04.js”,那么很明显:api

  *).js

  上面的链接是我们这次抓取请求的地址。

  接下来只需要用到两个python库:browser

  请求 json BeautifulSoup

  requests 库用于发出网络请求。说白了就是模拟浏览器获取资源。

  因为我们的采集是一个api接口,它的格式是json,所以我们需要使用json库来解析。BeautifulSoup用于解析html文档,可以方便的帮助我们获取指定div的内容。互联网

  让我们开始编写我们的爬虫:app

  第一步,导入以上三个包:异步

  import json

import requests

from bs4 import BeautifulSoup

  然后我们定义一个方法来获取指定页码中的数据:post

  def get_page(page):

url_temp = 'http://temp.163.com/special/00804KVA/cm_guonei_0{}.js'

return_list = []

for i in range(page):

url = url_temp.format(i)

response = requests.get(url)

if response.status_code != 200:

continue

content = response.text # 获取响应正文

_content = formatContent(content) # 格式化json字符串

result = json.loads(_content)

return_list.append(result)

return return_list

  这样就得到了每个页码对应的内容列表:

  

  对数据进行分析后,可以看到下图圈出的是需要抓取的标题、发布时间和新闻内容页面。

  

  既然已经获取到内容页面的url,那么就开始爬取新闻正文。

  在抓取文本之前,先分析文本的html页面,找到文本、作者、来源在html文档中的位置。

  我们看到文章的source在文档中的位置是:id = "ne_article_source"的标签。

  作者位置为:span标签,class = "ep-editor"。

  正文位置是:带有 class = "post_text" 的 div 标签。

  我们来试试采集这三个内容的代码:

  def get_content(url):

source = ''

author = ''

body = ''

resp = requests.get(url)

if resp.status_code == 200:

body = resp.text

bs4 = BeautifulSoup(body)

source = bs4.find('a', id='ne_article_source').get_text()

author = bs4.find('span', class_='ep-editor').get_text()

body = bs4.find('div', class_='post_text').get_text()

return source, author, body

  到目前为止,我们要抓取的数据都是采集。

  那么,当然,我会救他们。为了方便起见,我将它们直接以文本形式保存。这是最终结果:

  

  格式为json字符串,"title": ['date','url','source','author','body']。

  需要说明的是,目前的实现方式是完全同步和线性的。问题是 采集 会很慢。主要延迟在网络IO上,下次可以升级为异步IO,异步采集,有兴趣的可以关注下文章。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线