本次我们来分析搜狐新闻来抓取一些文章来作为我们以后的数据,开发过程中,我们需要用到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