|
楼主
查看: 6250回复: 2
发表于 2020-8-6 09:08:49
只看该作者
本帖最后由 secret 于 2020-8-6 09:19 编辑
Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。他们两个最显着的差异如下:
urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL。这意味着,你不能伪装你的用户代理字符串等。
urllib模块可以提供进行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具有这样的功能。这就是urllib与urllib2经常在一起使用的原因。
这里我们以爬取糗事百科段子为例,做一些简单的教学,大家在使用学习的情况下要注意爬取公共信息哦,如果爬取非公用信息很可能带来法律上的问题,
所以现在一定要切记要注意这些。
1 #爬糗事百科段子
2 import urllib,urllib2
3 import re
4
5 import sys
6
7 page = 2
8 def getPage(page_num=1):
9 url = "https://www.qiushibaike.com/8hr/page/" + str(page_num)
10 headers = {
11 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
12 try:
13 request = urllib2.Request(url, headers=headers)
14 response = urllib2.urlopen(request)
15 html = response.read()
16 return html
17 except urllib2.URLError, e:
18 if hasattr(e, "code"):
19 print "连接服务器失败,错误代码: {0}".format(e.code)
20 return None
21 if hasattr(e, "reason"):
22 print "连接服务器失败,错误圆圆: {0}".format(e.reason)
23 return None
24 def getPageCoent(page_num=1):
25 html =getPage(page_num)
26 re_page = re.compile(
27 r'<div class="author.*?>.*?<a.*?<img.*?alt="(.*?)">.*?<div class="content">.*?<span>(.*?)</span>.*?</div>.*?<span class="stats-vote">.*?<i class="number">(\d+)</i>',
28 re.S)
29 items = re_page.findall(html)
30 page_contents = []
31 replaceBR = re.compile(r'<br/>')
32
33 for item in items:
34 content = item[1]
35 new_content = replaceBR.sub('\n', content)
36 page_contents.append([page_num,
37 item[0].strip(),
38 new_content.strip(),
39 item[2].strip()]
40 )
41 return page_contents
42 def getOneStory(page_contents):
43 for story in page_contents:
44 input = raw_input()
45 if input == 'Q' or input == 'q':
46 sys.exit()
47 print "第{0}页\t发布人:{1}\t赞;{2}\n{3}\n".format(story[0],story[1],story[3],story[2])
48 if __name__ == '__main__':
49 print("正在看段子,按回车看新段子,退出q")
50 num = 1
51 while True:
52 page_contents = getPageCoent(num)
53 getOneStory(page_contents)
54 num += 1
好的各位同学们,以上就是我们这次学习,我们这代码运行成功的情况下,
能够爬取相关的数据,如果服务器拒绝爬虫的进入,可以加一些浏览器认证,
伪装成正常用户的使用,登入对方服务器,注意每秒刷新频率,防止对方服务器查杀或者异常报警。
这样的话,厌恶爬虫的服务器就可以正常的爬取数据,最后还是要提醒大家,尽量不要深入服务器内部
进行脱壳然后爬取核心数据的操作,这样很有可能走上违法犯罪的道路,造成严重后果。
|
|