开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 21 天,点击查看活动详情
链接爬虫
爬虫时经常碰到网页中有连接跳转的情况,我们想要的数据又需要跳转连接才能取到,这就需要使用到链接爬虫,而链接爬虫的主要步骤如下:
- 首先要确定要爬取的内容的入口链接,然后根据情况编写正则表达式来提取入口链接。
- UA模拟浏览器,以及反反爬来爬取页面。
- 使用编写好的正则表达式开始提取入口链接,并过滤掉重复的链接,最后将链接打印到屏幕上。
反反爬主要用到UA、reference、设置header信息等反反爬技术来模拟用户操作浏览器;提取链接主要用到的方法是re.compile、findall(data)等,对于重复的链接可以使用list(set(link))来实现多余元素的过滤,在过滤完成后返回过滤后的列表。
多线程爬虫
之前设计的爬虫都是从上往下依次执行的,也就是单线程爬虫,而在爬虫中使用多线程爬虫技术就可以实现部分爬虫分别执行,也就是在多条线上执行,这种执行结构是多线程爬虫,极大的提高了爬虫的效率,这里拿python来举例,在python中使用多线程需要使用threading模块,为了使用多线程,可以编写一个类继承thread类,把这个类作为一个线程,并使用__init__(selt)方法来初始化这个线程,然后再在run(self)方法编写这个线程要执行的代码逻辑,这个线程类不一定是一个,可以编写多个这样的线程类并通过start()方法来启动这些线程。
代码示例
import threading
import time
class myThread(threading.Thread):
def __init__(self, name, delay):
threading.Thread.__init__(self)
self.name = name
self.delay = delay
def run(self):
print("Starting " + self.name)
print_time(self.name, self.delay)
print("Exiting " + self.name)
def print_time(threadNmae, delay):
counter = 0
while counter < 3:
time.sleep(delay)
print(threadNmae, time.ctime())
counter += 1
threads = []
thread1 = myThread(name="Thread-1", delay=1)
thread2 = myThread(name="Thread-2", delay=2)