创造太阳 发表于 2020-2-19 13:42

爬取某网站的通知文件并保存(通知信息仅用于学术研究)

本帖最后由 创造太阳 于 2020-2-19 13:58 编辑

最近有朋友在写论文,需要用到某网站的通知信息来分析语言特色等内容,但是自己一篇篇复制的话,工作量太大了,因此就帮忙写了一个简单的爬虫。
主要用到的是requests库和re库,来进行文本的采集和清洗,因为仅仅只是做语料分析,所以采集的文本格式没有做优化。
之前也做过一个类似的视频教程,利用requests库、re库和lxml库采集和清理数据,并且对结构进行优化,感兴趣的可以看看:https://www.bilibili.com/video/av82868127

本次的代码如下:
"""导入所需模块"""
import requests#导入requests库
import re#导入正则表达式库
import time#导入时间time库
"""伪装正常访问"""
user = {
    'user-agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)'
    #打开浏览器输入:“about:version”,查看“用户代{过}{滤}理”,即本机的user-agent
}
"""用range()函数和for语句来拼接网址"""
for a in range(0,262):#用for语句和range()函数来一次获得数字0-262
    url = "http://sousuo.gov.cn/column/31567/" + str(a) +'.htm'#将获得的数字和网址进行拼接得到263个网址,注意要将变量a用str()转换为字符串才能拼接
    #print(url)    #为了测试是否成功进行打印查看
time.sleep(10)    #设置10秒延时
    response = requests.get(url,headers = user)       #用requests库的get函数访问网页,用headers进行伪装
    #print(response.text)    #打印网页
    html = response.text                           #用文本显示访问网页得到的内容
    #print(html)#打印网页内容,以便于使用正则表达式.
    """用正则表达式来获得每个文件的网址"""
    urls = re.findall('<a href=".*?" target="_blank">',html)#用正则表达式获得文件网址
    #print(urls)   #为了测试是否成功进行打印查看
    urls = "".join(urls)    #将列表转化为字符串
    url_wj = re.findall('+://[^\s"]*',urls)#提取网页中的每个文件具体网址
    #print(url_wj)   #为了测试是否成功进行打印查看
    """用for语句来一次访问每个文件的网址"""
    for url in url_wj:#用for语句来实现依次访问每个文件的网址
time.sleep(10)    #设置10秒延时
      response_gwy = requests.get(url,headers = user)#用变量response_gwy保存访问网址后获得的信息
      resopnse_gwy_wz = response_gwy.content.decode('utf-8')#用'utf-8'的编码模式来记录网址内容,防止出现中文乱码
      #print(resopnse_gwy_wz)    #为了测试是否成功进行打印查看
      tznr = re.findall('<p style="text-indent: 2em; font-family: 宋体; font-size: 12pt;">(.*?)</p>',resopnse_gwy_wz)#用正则表达式来获得文件的文字内容,清除多余的代码
      tznr = "".join(tznr)#将获得的文字内容由列表转换为字符串
      #print(tznr)#为了测试是否成功进行打印查看
      wjym = response_gwy.content.decode('utf-8')#用变量wjym保存获得的页面信息
      #print(wjym)
      """用正则表达式获得文件的标题"""
      title = re.findall('<title>(.*?)</title>',wjym)#用正则表达式来获得每个网址的标题,即文件标题
      #print(title)
      title = "".join(title)#将title列表转换为字符串
      title = re.findall('(.*?)_中国政府网',title)#用正则表达式删除“_中国政府网”重复信息
      title = "".join(title)#将title列表转换为字符串
      file_name = title# 用title字符串来为文件取名字
      #print(file_name)   #为了测试是否成功进行打印查看
      """保存每个文件"""
      print("正在爬取保存,请勿关闭……")
      with open( file_name + '.txt','w', encoding='utf-8') as f:#用w格式新建文件,并且用file_name命名,再加上“.txt”后缀,文字编码格式'utf-8'
            f.write(str(tznr))#将网页内容便利tznr用字符串的格式写入文本
            f.close()    #将文件关闭保存

成都老三 发表于 2020-2-19 15:47

感谢大佬分析

小恐龙 发表于 2021-5-6 10:47

可以收费帮忙写其他网站的爬虫吗,也是用于科研

创造太阳 发表于 2021-5-6 17:51

小恐龙 发表于 2021-5-6 10:47
可以收费帮忙写其他网站的爬虫吗,也是用于科研

需要哪些网站的数据信息,可以帮你看看
页: [1]
查看完整版本: 爬取某网站的通知文件并保存(通知信息仅用于学术研究)