打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python爬虫爬取百度搜索结果
[python] view plain copy
  1. # -*- coding: utf-8 -*-  
  2. #---------------------------------------  
  3. #   程序:百度搜索爬虫  
  4. #   版本:0.1  
  5. #   作者:LuoQi  
  6. #   日期:2015-03-24  
  7. #   语言:Python 2.7  
  8. #   操作:输入带分页的地址,去掉最后面的数字,设置一下起始页数和终点页数。  
  9. #   功能:下载对应页码内的所有页面并存储为txt文件。  
  10. #---------------------------------------  
  11. import string  
  12. import urllib  
  13. import urllib2  
  14. import re  
  15. import os  
  16. import socket   
  17. import time   
  18. #全局变量,如果频繁urlopen一个网站会被远程连接强制断掉,这里为了递归调用函数,接着从断掉的那一页重新开始爬取  
  19. CONSTANT = 1  
  20. def MailSearch(url,begin_page,end_page):   
  21.     global CONSTANT  
  22.     #正则匹配,这里我要获取@xxxx.com.cn结尾的邮箱号  
  23.     p = re.compile(r'\w+<em>@xxxx.com.cn')    
  24.     base_dir = "E:\\mailAddress\\"  
  25.     for i in range(begin_page, end_page+1):  
  26.         print i  
  27.         CONSTANT +=1  
  28.         try:  
  29.             sName = string.zfill(i,7) + '.txt' #自动填充成六位的文件名  
  30.             f = open(base_dir + sName,'w+')  
  31.             #不加sleep_download_time保持隔一段时间一次爬取指定会出现(python socket.error: [Error   
[python] view plain copy
  1.                      #10054] 远程主机强迫关闭了一个现有的连接)  
  2. #加了貌似还会出现,呵呵,所以被迫写了递归函数,保证我能爬完所有的搜索结果  
  3. timeout = 10  
  4. socket.setdefaulttimeout(timeout)#这里对整个socket层设置超时时间。后续文件中如果再使用                          
[python] view plain copy
  1.                         #到socket,不必再设置    
  2.             sleep_download_time = 1  
  3.             time.sleep(sleep_download_time) #这里时间自己设定    
  4.             requests = urllib2.urlopen(url + str(i*10)) #这里是要读取内容的,不断变更的地址  
  5.             content = requests.read()#读取,一般会在这里报异常,被爬取的网站强行断掉  
  6.             #之前直接获取到网页内容,然后直接正则匹配发现始终只能拿到第一页的内容后面的没有了  
  7.             #只能先下载下来,再正则再删去该网页,不知道哪位大神能给出解释  
  8.             f.write(content)  
  9.             f.close()  
  10.             requests.close()#记得要关闭   
  11.         except UnicodeDecodeError as e:  
  12.             print('-----UnicodeDecodeError url:',url)  
  13.             #继续调用爬取函数  
  14.             cnpcMailSearch(bdurl,CONSTANT,end_page)  
  15.         except urllib2.error.URLError as e:  
  16.             print("-----urlError url:",url)  
  17.             cnpcMailSearch(bdurl,CONSTANT,end_page)  
  18.         except socket.timeout as e:  
  19.             print("-----socket timout:",url)  
  20.             cnpcMailSearch(bdurl,CONSTANT,end_page)  
  21.           
  22.         file_object = open(base_dir + sName)  
  23.         try:  
  24.             all_the_text = file_object.read()  
  25.             mailAddress= p.findall(all_the_text)  
  26.             f = open(r'E:\\test.txt','a')  
  27.             for num in mailAddress:  
  28.                 s = str(num)  
  29.                 #在网页源代码里邮箱地址是这样的xxxxx<em>@xxxx.com.cn,没办法我得去掉<em>  
  30.                 s = s[:-16]+s[-12:]  
  31.                 f.write(s)  
  32.                 f.write('\n')  
  33.             f.close()  
  34.         finally:  
  35.             file_object.close()  
  36.         #即时删除下载的网页  
  37.         os.remove(base_dir + sName)  
  38.    
  39.    
  40. #-------- 在这里输入参数 ------------------  
  41. #这是原始的搜索结果地址特别长,而且每翻一页地址都会变化,研究了一下,其实不需要&rsv_*这个东东,&连接的内容之间<span style="font-family: Arial, Helvetica, sans-serif;">显然无顺序要求</span>  
[python] view plain copy
  1. #http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=%40xxxx.com.cn&rsv_pq=f96adbb30000145f&  
  2. #rsv_t=a5db0FgY8cAll9kpqEfb2F9yqcfIoZRa0BxSyHghKZJU8PvXwrGXvlTzT10&rsv_enter=0&rsv_sug3=1&rsv_sug1=1&rsv_sug4=1167&rsv_sug=1  
  3. #所以改为以下地址,方便获取  
  4. bdurl = "http://www.baidu.com/s?wd=%40xxxx.com.cn&oq=%40xxxx.com.cn&tn=sitehao123&ie=utf-8&pn="  
  5. #设置起始页,终止页  
  6. begin_page = 0  
  7. end_page = 1000  
  8. #-------- 在这里输入参数 ------------------  
  9. #调用  
  10. MailSearch(bdurl,begin_page,end_page)  

欢迎批评指正!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python 爬虫基础(1)
Python爬虫
python爬虫详解
Python爬虫基础总结
盘点一道Python网络爬虫中使用正则表达式匹配字符的题目
Python爬虫从入门到精通(五)动态网页的挑战
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服