Requests练习之爬取云栖社区博文

'''

目标站点:云栖社区(https://yq.aliyun.com/)
需求数据:指定关键词的博文数据
需求:自动翻页并下载到本地

'''

关键:网页分析

我们收索关键字“爬虫”,然后获取到前3页的链接进行分析,发现spm和p的值不同

这时后我们发现q的值代表搜索关键字,p的值代表页数,spm不是很懂,通过百度搜索知道了spm是埋点用的,追踪用户访问页面的统计数据,用来做一些pv UV分析,idx的值为default,days的值为空,我们发现这三个值对搜索博文并不是很重要。

所以我们可以尝试着将spm、idx、days去掉,只通过q和p来控制

我们将url改为这样,发现可以成功获取到页面,分析正确😀

现在我们来获取总页数

我们发现在每页搜索框下有总的博文数据,然后每页15篇博文,👌这样我们就可以得出总的页数。

接下来,我们就可以写代码了😋,附上代码。

'''
目标站点:云栖社区(https://yq.aliyun.com/)
需求数据:指定关键词的博文数据
需求:自动翻页并下载到本地
'''
import requests
import re

key = "爬虫" 
url = "https://yq.aliyun.com/search/articles/"
data = requests.get(url,params = {"q":key}).text
pat1 = '<div class="_search-info">找到(.*?)条关于'
nums = re.compile(pat1, re.S).findall(data)[0]
pages = int(nums)//15 + 1
for page in range(int(pages)):
	index = str(page+1)
	print("----正在爬取第" + index + "页----")
	getdata = {"q": key,
			   "p": index
			  }
	data = requests.get(url,params=getdata).text
	pat_url = '<div class="media-body text-overflow">.*?<a href="(.*?)">'
	articles = re.compile(pat_url, re.S).findall(data)
	for article in articles:
		thisurl = "https://yq.aliyun.com" + article
		thisdata = requests.get(thisurl).text
		pat_title = '<p class="hiddenTitle">(.*?)</p>'
		pat_content = ' <div class="content-detail unsafe markdown-body">(.*?)</div>'
		title = re.compile(pat_title, re.S).findall(thisdata)[0]
		content = re.compile(pat_content, re.S).findall(thisdata)[0]
		file = open("F:\\ProjectsCode\\python\\spiderfiles\\" + index + "_" + title + ".html", "w", encoding="utf-8")
		file.write(title + "<br><br>" + content)
		file.close()

新手上路,欢迎大佬来指点🙃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值