网页新闻抓取(【】此文级别的爬虫,老司机们就不用看了)
优采云 发布时间: 2021-09-30 05:15网页新闻抓取(【】此文级别的爬虫,老司机们就不用看了)
本文是一个入门级的爬虫程序,所以老驱动程序不必阅读它
这主要是抓取网易新闻,包括新闻标题、作者、来源、发布时间和新闻文本
首先,我们打开163网站,并随意选择一个类别。我在这里选择的类别是国内新闻。然后右键单击以查看源代码,并发现在源代码页的中间没有新闻列表。这表明此网页是异步的。即通过API接口获取的数据
确认后,您可以使用F12打开谷歌浏览器的控制台并单击网络。我们不断往下拉,发现右边出现了诸如“…Special/00804kva/cm_guonei_03.JS?”之类的地址。单击response并找到我们正在寻找的API接口
可以看出,这些接口的地址都有一定的规则:“cm_guonei_03.JS”,“cm_guonei_04.JS”,所以很明显:
上面的连接是我们这次要请求的地址
接下来,只需要两个Python库:
请求
json
美丽之群
请求库用于发出网络请求。换句话说,它模拟浏览器来获取资源
由于我们的采集API接口是JSON格式的,因此我们需要使用JSON库来解析它。Beauty soup用于解析HTML文档,它可以轻松帮助我们获取指定Div的内容
让我们开始编写爬虫程序:
第一步是导入上述三个包:
导入json
导入请求
从bs4导入BeautifulSoup
接下来,我们定义一种方法来获取指定页码中的数据:
def获取页面(第页):
url_uTemp='{}.js'
return_uuList=[]
对于范围内的i(第页):
url=url_uuu临时格式(i)
response=requests.get(url)
如果response.status uucode!=200:
继续
Content=response.text#获取响应正文
_Content=formatcontent(Content)#格式化JSON字符串
result=json.loads(_content)
return_uuList.append(结果)
返回列表
这样,获得与每个页码对应的内容列表:
之后,通过分析数据,我们可以看到下图中圈出的是要捕获的标题、发布时间和新闻内容页面
现在您已经获得了内容页面的URL,开始抓取新闻正文
在抓取文本之前,首先分析文本的HTML页面,找到文本在HTML文档中的位置、作者和来源
我们可以看到文章源在文档中的位置是id=“ne\u article\u source”的a标记
作者的位置是class=“EP editor”的span标记
正文位置是class=“post\u text”的div标签
以下是采访三项内容的代码采集:
def获取内容(url):
来源=“”
作者=“”
正文=“”
resp=requests.get(url)
如果响应状态uucode==200:
body=resp.text
bs4=美联(车身)
source=bs4.find('a',id='ne\u article\u source')。get\utext()
author=bs4.查找('span',class='ep-editor')。获取文本()
body=bs4.find('div',class='post_text')。get_utext()
返回源、作者、正文
到目前为止,我们想要捕获的所有数据都是采集
然后,当然,下一步是保存它们。为了方便我直接以文本的形式保存它们。以下是最终结果:
格式为JSON字符串“title”:['date'、'URL'、'source'、'author'、'body']
应该注意的是,当前的实现方法是完全同步和线性的。问题是采集将非常缓慢。主要延迟在网络IO中,下次可以升级为异步IO。异步采集。有兴趣的朋友可以关注下一个文章