学会这 10000 个段子,成为 IT 职场幽默达人。Pyt

「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

现代职场达人,应该做到 有情、有趣、有用、有品。好了,去掉 “有” 字你就成了。那如何成为职场幽默达人呢,咱需要一定的素材也就是段子,多看段子才能多说段子,并且还能说高级段子。

爬取前的分析工作

本次爬取的目标网站为:www.wllxy.net/gxqmlist.as…

学会这 10000 个段子,成为 IT 职场幽默达人。Python 爬虫小课 8-9

爬取的难度整体不大,分析工作基本可以省略,毕竟对于已经学习到这里的你来说,requests 已经掌握了 7~8 成火候了。

本文重点在给你介绍一下 requests 中的代理相关内容。

爬虫基础知识普及时间

啥是代理

代理就是代理网络用户去取得网络信息。大白话就是把用户本身的 IP 和其他网络相关信息想办法隐藏起来,让目标站点获取不到。

代理的种类

高匿名代理
高匿名代理会将数据包原封不动的转发,从目标网站的服务器来看,就像是一个真实的普通用户在访问,而且使用的 IP 也是代理服务器的 IP 地址,可以完美的隐藏用户原 IP,所以高匿名代理是爬虫程序代理首选。

普通匿名代理
普通匿名代理会在数据包上做一些改动,加入 HTTP 头固定参数。正式因为固定参数的存在导致目标服务器可以追踪的用户的真实 IP,反爬度高的网站很容易判断用户是否是爬虫程序。

透明代理
这个就不用细说了,代了白代,目标服务器很容易检测出来。

在代理的种类上,有时还会按照 HTTP 和 HTTPS 区分,现在的情况下大多数网站已经升级到 HTTPS 协议了,但 HTTP 并没有被舍弃掉,一般还可以进行爬取。这里需要注意下 HTTPS 需要多次握手,速度比较慢,使用代理之后就会变的更慢,所以以后能爬 HTTP 协议的网站就尽量爬取 HTTP 协议,包括使用代理也是。

requests 使用代理

requests 支持多种代理方式,设置办法也非常简单,通过为任意请求方法提供 proxies 参数来配置单个请求,例如下述代码(关于代理本部分为大家做一下介绍即可,因为本案例实操中发现不需要代理也可以轻松完成目标数据获取)

1
2
3
4
5
6
7
8
python复制代码import requests

proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

注意代理为一个字典参数,可以包含 HTTP 或者 HTTPS 中的任意一项。

还要注意 requests 是支持 SOCKS 代理的,知识点难度的问题,不做展开讲解。

代码编写时间

代理相关的知识已经介绍完毕,下面就进入实际编码环节。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
python复制代码import requests
import re
import threading

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"}

flag_page = 0

# 正则表达式解析环节,最终需要将三个元组进行合并,使用 zip 函数
def anay(html):
# 正则表达式通过三次进行匹配。可以想办法提高效率,留给大家。
pattern = re.compile(
'<td class="diggtdright">[.\s]*<a href=".*?" target="_blank">\s*(.*?)</a>')
titles = pattern.findall(html)
times = re.findall('发布时间:(\d+[-]\d+[-]\d+)', html)
diggt = re.findall('得票:(\d+)人次', html)
return zip(titles, times, diggt)

def save(data):
with open("newdata.csv", "a+", encoding="utf-8-sig") as f:
f.write(f"{data[0]},{data[1]},{data[2]}\n")

def get_page():
global flag_page
while flag_page < 979:
flag_page += 1
url = f"http://www.wllxy.net/gxqmlist.aspx?p={flag_page}"
print(f"正在爬取{url}")
r = requests.get(url=url, headers=headers)

ok_data = anay(r.text)
for data in ok_data:
print(data)
# 保存到本地方法自行完成
# save(data)

if __name__ == "__main__":
for i in range(1, 6):
t = threading.Thread(target=get_page)
t.start()

注意,zip 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。zip 返回的是一个对象。如需展示列表,需手动 list() 转换。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

其余内容涉及数据保存部分,即上述代码中的 save 函数,可以自行编写。

最后在啰嗦两句

本系列爬虫小课主要介绍的是 requests 库,学习完毕,你就能对 requests 库有一个比较完善的认知。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%