开始改公司的爬虫代码了,但是对feadper理解还不到位。比如代码中feadper.request所需要的参数是什么?
为了关闭多余的连接,requests库的http_connection的连接为什么要修改,怎么修改?
requests使用了urllib3库,默认的http connection是keep-alive的,requests设置False关闭。
回调函数的使用
在爬虫框架中,回调函数是一个非常重要的概念,它定义了在请求得到响应后要执行的处理逻辑。在 feapder 框架中,通过回调函数来定义如何处理爬取到的页面内容。
在 feapder.Request 中,有一个参数叫做 callback,它接受一个回调函数,即一个函数或者一个类中的方法。以下是回调函数的作用和不同的回调函数之间的区别:
作用:
处理响应内容: 回调函数主要用于处理从服务器获取到的响应内容。在回调函数中,你可以解析 HTML、提取数据、处理异常等。
生成新请求: 在回调函数中,你可以生成新的
feapder.Request对象,从而形成请求链,实现深度爬取。
不同的回调函数:
普通函数: 你可以直接使用一个普通的函数作为回调函数。这个函数应该接受一个参数,即爬取到的响应对象,然后在函数中实现相应的处理逻辑。
类中的方法: 你也可以使用类中的方法作为回调函数。这时,你需要指定类的名称和方法名。例如,如果你有一个类
MySpider,其中有一个方法parse_page,你可以使用'callback': 'MySpider.parse_page'来指定回调函数。在 Feapder 中,如果想要指定回调函数,可以使用字符串形式表示回调函数的路径,其中路径格式为
class_name.method_name。这样 Feapder 将根据指定的路径调用相应的回调函数。下面是一个简单的示例:import feapder class MySpider(feapder.AirSpider): def start_requests(self): start_url = 'https://example.com' yield feapder.Request(url=start_url, callback='MySpider.parse_page') def parse_page(self, request, response): # 在这里处理解析页面的逻辑 print('Parsing page:', response.url) if __name__ == "__main__": MySpider().start()在上述代码中,
start_requests方法生成了一个初始请求,指定了callback参数为'MySpider.parse_page'。Feapder 在执行时会根据这个字符串来调用相应的回调函数。此时,MySpider类中的parse_page方法将被调用来处理页面解析的逻辑。请注意,在使用这种方式时,确保指定的回调函数路径是正确的。如果回调函数在不同的模块或类中,需要正确指定类名和方法名的路径。
使用不同的回调函数可以让你的爬虫更加灵活,能够根据不同的需求定制处理逻辑。例如,你可以定义一个回调函数用于解析页面内容,另一个回调函数用于生成新请求,从而实现更复杂的爬取逻辑。
定义一个回调函数用于解析页面内容,另一个回调函数用于生成新请求
当你想要定义一个回调函数用于解析页面内容,另一个回调函数用于生成新请求时,可以通过在 parse 方法中实现这两个逻辑。以下是一个简单的示例:
import feapder
class MySpider(feapder.AirSpider):
def start_requests(self):
start_url = 'https://example.com'
yield feapder.Request(url=start_url, callback=self.parse)
def parse(self, request, response):
# 在这里处理解析页面的逻辑
print('Parsing page:', response.url)
# 解析页面内容,假设从中获取到新的链接
new_links = ['https://example.com/page2', 'https://example.com/page3']
# 生成新请求
for link in new_links:
yield feapder.Request(url=link, callback=self.parse_detail)
def parse_detail(self, request, response):
# 在这里处理解析详细页面的逻辑
print('Parsing detail page:', response.url)
if __name__ == "__main__":
MySpider().start()
在上述代码中,parse 方法用于解析页面内容,并从中获取新的链接。然后,通过 yield feapder.Request 生成新的请求,并指定 callback 为 self.parse_detail。parse_detail 方法用于处理新请求的页面内容。通过这种方式,你可以将解析页面和生成新请求的逻辑分别放在两个不同的回调函数中。