标题Python小爬虫爬取云栖社区

本代码经测试可以正常爬取,现做整体的项目介绍。
爬取目标:https://yq.aliyun.com/,也就是云栖社区中关于Python的帖子标题以及内容。
实现的工具:Python的request库
其中涉及的技术:heads伪装,re正则表达式的使用,URL拼接,URL自动跳转,爬取的信息本地保存。
整个项目跑完大概是三个小时左右。
项目的前期准备:requests库的安装,具体细节自行搜索。

import time
import requests
import re
#导入项目包
url='https://yq.aliyun.com/search/articles'
#爬取目标
key='python'
#上面的网址中需要搜索的关键字
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'accept-encoding': 'gzip, deflate, sdch, br',
'accept-language': 'zh-CN,zh;q=0.8'
}
#头信息伪装,可以不使用,因为暂时没有头信息反爬
data=requests.get(url,params={'q':key},headers=headers).text
#读取第一个页面
pat1='<div class="_search-info">找到(.*?)条关于'
#获取帖子数量的正则
alllines=re.compile(pat1,re.S).findall(data)[0]
#使用正则提取帖子数量
#print(type(alllines),alllines)
allpage=int(alllines)//15+1
#帖子的页数
#print(type(allpage),allpage)
for i in range(0,int(allpage)):
print('*'*40)
index=str(i+1)
getdata={'q':key,'p':index}
#拼接URL
data=requests.get(url,params=getdata).text
pat2='<div class="media-body text-overflow">.*?<a href="(.*?)">'
articles=re.compile(pat2,re.S).findall(data)
#获取每一个帖子的URL
#print(articles)
for j in articles:
thisurl="https://yq.aliyun.com/"+j
#每一个帖子的URL,
#print(type(thisurl))
thisdata=requests.get(thisurl).text
pat_title='<p class="hiddenTitle">(.*?)</p>'

#print(type(pat_title))
pat_content='<div class="content-detail unsafe markdown-body">(.*?)<div class="copyright-outer-line">'
title = re.compile(pat_title,re.S).findall(thisdata)[0]
#获取每一个帖子的标题

content=re.compile(pat_content,re.S).findall(thisdata)[0]
#获取每一个帖子的正文
file=open('e:\\aaaaa\\'+str(i)+'_'+str(time.time())+'.txt','w',encoding='utf-8')
#指定保存数据的路径,文件名为爬取页码加当前时间,
#文件后缀为txt,可以任意指定文本格式,比如html
file.write(title+'<br/> <br/>'+content)
#写模式写入数据,每一次内循环结束,生成一个文件
#标题和正文之间加入换行
file.close()
#写入完毕,关闭数据流