基于python的scrapy爬虫,关于增量爬取是怎么处理的
对于只是读取某几个网站更新内容的爬虫完全没必要在python代码中实现增量的功能,直接在item中增加Url字段。
item['Url'] = response.url
然后在数据端把储存url的column设置成unique。

之后在python代码中捕获数据库commit时返回的异常,忽略掉或者转入log中都可以。
我使用的是SqlAlchemy。我是这么写的
from sqlalchemy.exc import IntegrityError
class XxxPipeline(object):
def process_item(self, item, spider):
#一些session.add()
#........
try:
session.commit()
print 'crawl %s done!' % item['Url']
except IntegrityError:
print 'skip %s .' % item['Url']
return item
虽然每次crawl都会重复抓取一些数据,但最终结果库内不会有相同的Url。
对于小规模的爬虫,这种重复抓取的成本基本可以忽略。
如何使用Python获取当前页面的请求接口的返回信息
一般情况下接口的返回信息最终会渲染到页面上,如果对于性能没太大要求,可以使用浏览器模拟的方式获取页面渲染后的数据,如果对于性能有要求,可以通过浏览器的开发者工具拿到接口请求地址参数和返回结果。第一种方式可以使用selenium,第二种方式可以使用postman或者wireshark进行模拟请求和测试
这个非常简单,requests模块就可以轻松实现,下面我简单介绍一下:
requests简介
requests模块是Python一个非常实用的HTTP库,可以很方便的进行get、post、put、delete等常见web接口测试,对于返回的数据可以直接json序列化,处理起来非常快捷,中文官网地址https://2.python-requests.org//zh_CN/latest/index.html,介绍的非常详细:
接口测试
1.首先,安装requests模块,这个直接在cmd窗口输入安装命令“pip install requests”就行,如下,很快就能安装成功:
2.安装完成后,我们就可以直接进行web接口测试了,这里主要进行了get、post、put、delete4中常见类型的请求,主要代码及截图如下:
get请求:这里可以直接将参数作为url的一部分进行传递(单独封装也行),测试代码如下,非常简单,get发送request请求,然后获取response响应,解析并打印响应信息,包括status_code、headers、cookies、text等:
程序运行截图如下,已经成功获取到接口返回的数据:
post请求:这里的参数不能直接传递给url地址,需要作为data随同post请求一起提交,测试代码如下,将需要提交的参数赋值给data就行:
程序运行截图如下,已经成功获取到接口返回信息:
put请求:这个和post请求差不多,也需要先封装参数,然后随同put请求一起提交,测试代码如下,非常简单:
程序运行截图如下,成功获取接口返回信息:
delete请求:这个也非常简单,测试代码如下,直接发送请求就行:
程序运行截图如下,也已成功获取接口返回信息:
至此,我们就完成了requests模块的安装和简单使用。总的来说,这个模块使用起来非常方便,可以很便捷的进行web接口测试,在爬虫中也经常会用到,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
基于python的scrapy爬虫,关于增量爬取是怎么处理的
对于只是读取某几个网站更新内容的爬虫完全没必要在python代码中实现增量的功能,直接在item中增加Url字段。
item['Url'] = response.url
然后在数据端把储存url的column设置成unique。
之后在python代码中捕获数据库commit时返回的异常,忽略掉或者转入log中都可以。
我使用的是SqlAlchemy。我是这么写的
from sqlalchemy.exc import IntegrityError
class XxxPipeline(object):
def process_item(self, item, spider):
#一些session.add()
#........
try:
session.commit()
print 'crawl %s done!' % item['Url']
except IntegrityError:
print 'skip %s .' % item['Url']
return item
虽然每次crawl都会重复抓取一些数据,但最终结果库内不会有相同的Url。
对于小规模的爬虫,这种重复抓取的成本基本可以忽略。