网页新闻抓取(Python学习资料获取指定页码内数据的方法及方法)

优采云 发布时间: 2022-04-01 07:21

  网页新闻抓取(Python学习资料获取指定页码内数据的方法及方法)

  PS:如需Python学习资料,可点击下方链接自行获取

  本文属于入门级爬虫,老司机不用看。

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

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

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

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

  *).js

  上面的连接也是我们这次爬取要请求的地址。

  接下来只需要两个python库:

  要求

  json

  美丽汤

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

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

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

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

  importjsonimportrequestsfrom bs4 import BeautifulSoup

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

  1 defget_page(page):2 url_temp = '{}.js'

  3 return_list =[]4 for i inrange(page):5 url =url_temp.format(i)6 response =requests.get(url)7 if response.status_code != 200:8 继续

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

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

  11 结果 =json.loads(_content)12 return_list.append(result)13 return return_list

  这将得到每个页码对应的内容列表:

  分析数据后,我们可以看到下图中圈出了需要抓取的标题、发布时间、新闻内容页面。

  既然已经获取到了内容页的url,接下来就是爬取新闻正文了。

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

  我们看到 文章 源在文档中的位置为:id = "ne_article_source" 的标签。作者的立场是:class="ep-editor"的span标签。主体位置是:带有 class = "post_text" 的 div 标签。

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

  1 defget_content(url):2 源 = ''

  3作者=''

  4 身体 = ''

  5 resp =requests.get(url)6 if resp.status_code == 200:7 body =resp.text8 bs4 =BeautifulSoup(body)9 source = bs4.find('a', id='ne_article_source' ).get_text()10 author = bs4.find('span', class_='ep-editor').get_text()11 body = bs4.find('div', class_=' post_text').get_text()12 返回源、作者、正文

  到目前为止,我们一直在抓取的所有数据都是 采集。

  然后,当然,下一步是保存它们。为了方便,我直接以文本的形式保存。这是最终结果:

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

  需要注意的是,目前的实现是完全同步和线性的,问题是采集会很慢。主要延迟在网络IO上,可以升级为异步IO,异步采集。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线