欢迎来到天天文库
浏览记录
ID:42356588
大小:483.12 KB
页数:31页
时间:2019-09-13
《爬虫学习心得》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、爬虫学习心得陈思哲233201222038172012级计算机一班原来的代码有几点我们要改的1.区号,点评网为不同的商区编订不同的号,而且值得注意的是它通常不是连着的,像开始时我们模仿北京的编号就一连串下来,那是错误的。我个人采取的方法是一个区一个区的爬,那怎么知道区号呢?在网址最上方的最后有一个r1841那么就代表着鼓浪屿的区号,由于要求是一个区建一个文件,那么鼓浪屿就可以和别的思明区的编号建在一个列表里。2.指定一个文件来存放爬出来的信息,这些信息会以txt格式来保存。f=open('D:/dianp
2、ing/'+str(time.strftime(ISOTIMEFORMAT)) +'.txt','a+')这个就是多IP爬虫,一个IP很容易就被发现并禁止这个就是多客户端爬虫,单一个的客户端很容易被发现并禁掉之后介绍一下搜索的方式,老师给的代码是一种典型的深度优先搜索importurllib2,urlliburllib2模块定义的函数和类帮助打开url(主要是HTTP)在一个复杂的世界-基本和简要身份验证,重定向,cookie和更多。importre正则表达式importtime提供各种时间函数impor
3、tstring字符串处理的函数improtrequest与urlib差不多,更简单importsocket套接字套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。Python中的random模块用于生成随机数。importuser_agents这个比较特殊,是人为定义的库,这个库存储了许多IP或是对点评网的访问方式,目的
4、就是随机选一个IP访问以避免网站对单一IP登陆的封杀。timeout=60socket.setdefaulttimeout(timeout)#设置HTTP或Socket访问超时,来防止爬虫抓取某个页面时间过长。(这个时间用秒#来算)defget_status(url):r=requests.get(url,allow_redirects=False)#allow_redirects=False不允许间接地访问,用request库中的get函数来抓取URLreturnr.status_code#获取网页内容
5、defcontent_get(url):try:#“#”是注释的意思#proxy_ip=random.choice(proxyIP.proxy_list)#printproxy_ip#proxy_support=urllib2.ProxyHandler(proxy_ip)#opener=urllib2.build_opener(proxy_support,urllib2.HTTPHandler)#urllib2.install_opener(opener)req=urllib2.Request(url)#
6、这个类是一个抽象的URL请求。user_agent=random.choice(user_agents.user_agents)#在刚才的user_agents里面随机找一个登录方法req.add_header('User-Agent',user_agent)req.add_header('Referrer',url)printuser_agent#python的输出函数是printpage=urllib2.urlopen(req)content=page.read()page.close()return
7、content#正常的话就用content来保存读出的结果并且一定要关闭文件并返回contentexceptUnicodeDecodeErrorase:print('-----UnicodeDecodeErrorurl:',url)return''#解码错误则输出并返回空excepturllib2.HTTPErrorase:print("-----HTTPErrorurl:",url)return''#网站禁止爬虫则输出并返回空exceptsocket.timeoutase:print("-----soc
8、kettimout:",url)return''#抓取超时则输出并返回空excepturllib2.URLError,e:ifhasattr(e,'reason'):print'Failedtoreachaserver.'print'Reason:',e.reasonreturn''elifhasattr(e,'code'):#"elif"相当于elseifprint'Theservercouldn'tfulfillther
此文档下载收益归作者所有