登录
    Technology changes quickly but people's minds change slowly.

python爬虫获取搜狐新闻

人丑多读书 破玉 1553次浏览 0个评论

  本次我们来分析搜狐新闻来抓取一些文章来作为我们以后的数据,开发过程中,我们需要用到requests库来处理我们的HTTP请求,Beautifulsoup库来处理我们的HTML文档。由于我们只是获取一部分资讯,所以我们不准备使用队列和多线程来获取所有的内容。只是简单的对文章内容做一些处理。

获取部分文章的链接

我们针对搜狐新闻的要闻部分来获取,如下图
image
我们需要获取包含文章列表的那一部分内容,通过分析网页元素,我们发现,内容位于class属性为r的div标签中
image

html=html.get(url).content
bsobj=BeautifulSoup(html,'html.parser')
r=bsobj.find('div',{'class':'r'})
print(r)

通过打印标签内容,我们发现标题中文乱码了
image
于是我们对内容进行一下编解码,从网页内容我们可以知晓网页编码是gb2312
image
于是我们将获取到的内容先用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)

image
这样乱码问题就解决了。
  接下来,我们获取所有文章链接,我们需要获取所有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)

image
文章链接获取完成。

根据文章链接获取文章内容

第一步是获取文章标题:
image
通过审查网页元素,我们可以观察到标题位于h1标签中,我们获取h1标签的内容就可以取得文章标题

        bsObj=requests.session()
	bsObj=BeautifulSoup(bsObj.get(link,headers=headers).content,'html.parser')
	title=bsObj.h1.get_text()

第二步是获取文章内容
image
通过观察网页元素,我们发现文章内容位于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)

image

文件下载

  文件名称:souhunews  文件大小:127kb
  下载声明:本站文件大多来自于网络,仅供学习和研究使用,不得用于商业用途,如有版权问题,请联系博猪!
  下载地址:搜狐新闻爬虫

密码: 8377


华裳绕指柔, 版权所有丨如未注明 , 均为原创|转载请注明python爬虫获取搜狐新闻
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址