Python爬虫学习进阶

[复制链接]

150

主题

446

帖子

1968

积分

审核员

Rank: 9Rank: 9Rank: 9

积分
1968
楼主
查看: 6254回复: 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

好的各位同学们,以上就是我们这次学习,我们这代码运行成功的情况下,

能够爬取相关的数据,如果服务器拒绝爬虫的进入,可以加一些浏览器认证,

伪装成正常用户的使用,登入对方服务器,注意每秒刷新频率,防止对方服务器查杀或者异常报警。

这样的话,厌恶爬虫的服务器就可以正常的爬取数据,最后还是要提醒大家,尽量不要深入服务器内部

进行脱壳然后爬取核心数据的操作,这样很有可能走上违法犯罪的道路,造成严重后果。

45

主题

179

帖子

455

积分

二氧化硅

Rank: 2

积分
455
沙发
发表于 2020-8-6 14:01:00   只看该作者
谢谢分享

41

主题

160

帖子

332

积分

二氧化硅

Rank: 2

积分
332
板凳
发表于 2020-8-6 14:01:43   只看该作者
谢谢分享
快速回复 返回顶部 返回列表