蟒蛇爬取GWY-ZY
其他
2020-02-05 16:31:47
阅读次数: 0
刚开始学习python来做爬虫爬取相关数据,本次使用了python的第三方库requests和内嵌的正则表达式库进行爬取相关资料,并保存到本地。 导入模块 import requests #导入requests库 import re #导入正则表达式库 伪装身份 user = { 'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' #打开浏览器输入:“about:version”,查看“用户代理”,即本机的user-agent } 分析和拼接网址 打开GWY官网后寻找到zhongyang有关文件网址,网址具有一定的规律性,即最后的每一个数字变化代表了翻页内容。通过range()函数和for语句来变换网址 访问网址和获得网页内容 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('[a-zA-z]+://[^\s"]*',urls) #提取网页中的每个文件具体网址 #print(url_wj) #为了测试是否成功进行打印查看 获取每个文件页面的信息 用for语句来获得每个页面的信息 for url in url_wj: #用for语句来实现依次访问每个文件的网址 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) #为了测试是否成功进行打印查看 with open( file_name + '.txt','w', encoding='utf-8') as f: #用w格式新建文件,并且用file_name命名,再加上“.txt”后缀,文字编码格式'utf-8' f.write(str(tznr)) #将网页内容便利tznr用字符串的格式写入文本 f.close() #将文件关闭保存 全部完整代码如下: """导入所需模块""" import requests #导入requests库 import re #导入正则表达式库 """伪装正常访问""" user = { 'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' #打开浏览器输入:“about:version”,查看“用户代理”,即本机的user-agent } """用range()函数和for语句来拼接网址""" for a in range(0,14): #用for语句和range()函数来一次获得数字0-14 url = "http://sousuo.gov.cn/column/30471/" + str(a) +'.htm' #将获得的数字和网址进行拼接得到15个网址,注意要将变量a用str()转换为字符串才能拼接 #print(url) #为了测试是否成功进行打印查看 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) #用正则表达式获得文件网址 function(){ //外汇返佣 http://www.fx61.com/ #print(urls) #为了测试是否成功进行打印查看 urls = "".join(urls) #将列表转化为字符串 url_wj = re.findall('[a-zA-z]+://[^\s"]*',urls) #提取网页中的每个文件具体网址 #print(url_wj) #为了测试是否成功进行打印查看 """用for语句来一次访问每个文件的网址""" for url in url_wj: #用for语句来实现依次访问每个文件的网址 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() #将文件关闭保存 |
|
发布了551 篇原创文章 ·
获赞 1 ·
访问量 9032
转载自blog.csdn.net/xiaoyaGrace/article/details/104174813