本次我们来分析搜狐新闻来抓取一些文章来作为我们以后的数据,开发过程中,我们需要用到requests库来处理我们的HTTP请求,Beautifulsoup库来处理我们的HTML文档。由于我们只是获取一部分资讯,所以我们不准备使用队列和多线程来获取所有的内容。只是简单的对文章内容做一些处理。
获取部分文章的链接
我们针对搜狐新闻的要闻部分来获取,如下图
我们需要获取包含文章列表的那一部分内容,通过分析网页元素,我们发现,内容位于class属性为r的div标签中
html=html.get(url).content bsobj=BeautifulSoup(html,'html.parser') r=bsobj.find('div',{'class':'r'}) print(r)
通过打印标签内容,我们发现标题中文乱码了
于是我们对内容进行一下编解码,从网页内容我们可以知晓网页编码是gb2312
于是我们将获取到的内容先用gb2312解码,再用utf-8编码
html=requests.session() html=html.get(url,headers=headers).content html=html.decode('gb2312','ignore').encode('utf-8') bsobj=BeautifulSoup(html,'html.parser') r=bsobj.find('div',{'class':'r'}) print(r)
这样乱码问题就解决了。
接下来,我们获取所有文章链接,我们需要获取所有a标签的href属性,并且用正则表达式来判断是否是文章链接
alist=r.findAll('a') for link in alist: href=link.attrs['href'] if re.match('^(http://news.sohu.com/)[0-9]{8}\/n[0-9]{9}(.shtml)$',href): print(href)
文章链接获取完成。
根据文章链接获取文章内容
第一步是获取文章标题:
通过审查网页元素,我们可以观察到标题位于h1标签中,我们获取h1标签的内容就可以取得文章标题
bsObj=requests.session() bsObj=BeautifulSoup(bsObj.get(link,headers=headers).content,'html.parser') title=bsObj.h1.get_text()
第二步是获取文章内容
通过观察网页元素,我们发现文章内容位于itemprop属性值为articleBody的div中,然后我们还需要过滤掉其中的script标签。
content=bsObj.find('div',{'itemprop':'articleBody'}) script=content.findAll('script') for sc in script: sc.extract() content=content.get_text()
这样,我们就获取到了文章内容
将文章保存到本地
我们以文章标题为文件名,文章内容为文件内容,将文章保存到本地。
def write_file(str_title,content): with open(str_title+'.txt','w') as f: f.write(content)
文件下载 | 文件名称:souhunews | 文件大小:127kb |
下载声明:本站文件大多来自于网络,仅供学习和研究使用,不得用于商业用途,如有版权问题,请联系博猪! | ||
下载地址:搜狐新闻爬虫 |
密码: 8377