热门搜索 :
考研考公
您的当前位置:首页正文

5 个用 Python 编写非阻塞 web 爬虫的方法

来源:东饰资讯网

用户代理

你需要关心的第一件事是设置用户代理。 用户代理是用户访问的工具,并告知服务器用户正在使用哪个网络浏览器访问网站。 如果未设置用户代理,许多网站不会让你查看内容。 如果你正在使用rquests库,可以执行如下操作:

你可以通过在 Google 搜索栏中输入 User-Agent 来获取用户代理的信息,并且它会返回你当前的用户代理信息。

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群:【923414804】,我们一起学Python。

importnumpyasnpdefget_random_ua():random_ua =''ua_file ='ua_file.txt'try:withopen(ua_file)asf:            lines = f.readlines()iflen(lines) >0:            prng = np.random.RandomState()            index = prng.permutation(len(lines) -1)            idx = np.asarray(index, dtype=np.integer)[0]            random_proxy = lines[int(idx)]exceptExceptionasex:        print('Exception in random_ua')        print(str(ex))finally:returnrandom_ua

ua_file.txt 包含一个来自我上面共享的网站的每行 UA 。 函数 get_random_ua 将始终从该文件中返回唯一的 UA 。 你现在可以调用如下函数:

user_agent = get_random_ua()

headers = {

        'user-agent': user_agent,

    }

Referrers

如果你点击查看放大的图像,你可以看到一些链接指向我所需的类别。一旦你收集所有这些真实的反向链接,你可以通过复制逻辑 insideget_random_ua()返回随机引用,并将它们用作引用。 如下所示:

headers = {'user-agent': user_agent,'referer':referer}

代理 IP

如果你正在使用请求,你可以像下面这样使用它:

如果你在 Selenium 使用代理 IP ,那么这将有点棘手。

不用说,get_random_proxy() 是返回一个唯一且随机代理的方法,就像上面获得唯一且随机的 UA 和 Referer 一样。

你可以思考一个这样的系统,在系统中你可以设置一个 IP 每天或每小时访问网站频率,如果它超过了,那么它将被放入一个笼子里直到第二天。 我所在的公司设计了一个这样的系统,不仅设置了 IP 访问频率,还记录了哪个 IP 被阻止。 最后,我只是使用代理服务提供者仅替换这些代理。 由于这超出了本文的范围,所以我不会详细介绍它。

Request Headers

到目前为止,事情你都已经做得很好,但是仍然有些狡猾的网站要求你做更多的事情。当你访问页面的时候他们会查找特定的请求响应头信息,如果特定的头信息没有被发现,他们会阻止内容显示或者展示一个虚假的内容。模拟一个你想访问的网站的请求是非常简单的。例如,比如你正准备访问一个 Craigslist URL ,并且想知道哪个头部信息是需要的。进入 Chrome/Firefox 浏览器,检查正在访问的页面,你应该会看到下面这些内容:

如果你点击了图标并查看,你能找到除了 referer 和 user-agent 之外的大量信息。你能一次性全都实现也可以一个个的实现并测试。无论访问哪个网站,我总是去设置这些信息。请确保你不只是复制粘贴这些信息去访问所有网站,因为这些信息通常会因网站不同而改变。

延时

在请求之间放置一些延迟总是很好的。我使用 numpy.random.choice() 来实现这一目标,该函数将在我想延迟的服务中传递随机数列表:

delays = [7, 4, 6, 2, 10, 19]

delay = np.random.choice(delays)

time.sleep(delay)

如果你还没有使用过 numpy 库,你也可以使用 random.choice 来达到同样的目的。

Top