网站改地址要钱吗,学做网站的书哪些好,模板之家html,网站服务器解决方案此文属于入门级级别的爬虫#xff0c;老司机们就不用看了。
本次主要是爬取网易新闻#xff0c;包括新闻标题、作者、来源、发布时间、新闻正文。
首先我们打开163的网站#xff0c;我们随意选择一个分类#xff0c;这里我选的分类是国内新闻。然后鼠标右键点击查看源代码老司机们就不用看了。
本次主要是爬取网易新闻包括新闻标题、作者、来源、发布时间、新闻正文。
首先我们打开163的网站我们随意选择一个分类这里我选的分类是国内新闻。然后鼠标右键点击查看源代码发现源代码中并没有页面正中的新闻列表。这说明此网页采用的是异步的方式。也就是通过api接口获取的数据。
那么确认了之后可以使用F12打开谷歌浏览器的控制台点击Network我们一直往下拉发现右侧出现了... special/00804KVA/cm_guonei_03.js? .... 之类的地址点开Response发现正是我们要找的api接口。可以看到这些接口的地址都有一定的规律“cm_guonei_03.js”、 “cm_guonei_04.js”那么就很明显了
上面的连接也就是我们本次抓取所要请求的地址。
接下来只需要用到的python的两个库
requests
json
BeautifulSoup
requests库就是用来进行网络请求的说白了就是模拟浏览器来获取资源。
由于我们采集的是api接口它的格式为json所以要用到json库来解析。BeautifulSoup是用来解析html文档的可以很方便的帮我们获取指定div的内容。
下面开始编写我们爬虫
第一步先导入以上三个包
import json
import requests
from bs4 import BeautifulSoup
接着我们定义一个获取指定页码内数据的方法
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文档中的位置。
我们看到文章来源在文档中的位置为id ne_article_source 的 a 标签。
作者位置为class ep-editor 的 span 标签。
正文位置为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, idne_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字符串“标题” [ ‘日期’ ‘url’ ‘来源’ ‘作者’ ‘正文’ ]。
要注意的是目前实现的方式是完全同步的线性的方式存在的问题就是采集会非常慢。主要延迟是在网络IO上下次可以升级为异步IO异步采集有兴趣的可以关注下次的文章。